私はlaravel 4.2を使用していますが、次の問題があります。
私の検証は
Store
関数で適切に機能しますが、同じコードを使用してデータを検証する場合
Update関数では、バリデーターは機能しますが、正しくリダイレクトされないか、検証エラーが表示されません。もう少し詳しく言うと;更新関数では、バリデーターはデータを検証しますが、検証エラーで編集ページにリダイレクトするのではなく、バリデーターが失敗した場合。新しいデータを保存せずにインデックスページにリダイレクトします。これが私のコードです。
型番
public static $rules= array(
'location'=> 'required',
'price'=> 'required|numeric',
'info'=> 'required'
);
コントローラー(ストアのコード)
public function store()
{
$v=Validator::make(Input::all(), Estate:: $rules);
if ($v->fails())
{
return Redirect ::route ('estates.create')
->withInput(Input::all())
->withErrors($v);
}
else
{
$userid = Auth::user()->getId();
$estate = new Estate;
$estate-> location = Input :: get('location');
$estate-> price = Input::get('price');
$estate-> info = Input::get ('info');
$estate->user_id = $userid;
$estate->save();
return Redirect::to('estates');
}
}
作成用に表示
{{Form::Open(array ('url'=>'estates')) }}
<div class="form-group {{$errors->has('location') ? 'has-error' : ''}}">
<label for="location">Location:</label>
<input type="string" name="location" value="{{{ Input::old('location') }}}" class="form-control">
{{$errors->first('location','<span class="help-block">:message</span>')}}
</div>
<div class="form-group {{$errors->has('price') ? 'has-error' : ''}}">
<label for="price">Price:</label>
<input type="string" name="price" value="{{{ Input::old('price') }}}" class="form-control">
{{$errors->first('price','<span class="help-block">:message</span>')}}
</div>
<div class="form-group {{$errors->has('info') ? 'has-error' : ''}}">
<label for="info">Info:</label>
<textarea input type ="text" class="col-md-12 input-block-level" rows="8" name="info" id="info" class="from-control">{{{ Request::old('info') }}}</textarea>
{{$errors->first('info','<span class="help-block">:message</span>')}}
</div>
</div>
<div class="container">
<button type="Submit" class="btn btn-default">Add estate</button>
</div>
{{Form::close()}}
コントローラー(更新用コード)
public function update($id)
{
$v=Validator::make(Input::all(), Estate:: $rules);
if ($v->fails())
{
return Redirect ::route ('estates.edit')
->withInput(Input::All())
->withErrors($v);
}
else
{
$userid = Auth::user()->getId();
$estate = Estate::find($id);
$estate-> location = Input::get('location');
$estate-> price = Input::get('price');
$estate-> info = Input::get ('info');
$estate->user_id = $userid;
$estate->save();
return Redirect::to('estates');
}
}
更新用に表示
<div class="container">
{{Form::Open(array ('method'=>'patch' , 'route'=> array ('estates.update', $estate->id)))}}
<div class="form-group {{$errors->has('location') ? 'has-error' : ''}}">
<label for="">Location:</label>
<input type="string" name="location" value="{{$estate->location}}" class="form-control">
{{$errors->first('location','<span class="help-block">:message</span>')}}
</div>
<div class="form-group {{$errors->has('price') ? 'has-error' : ''}}">
<label for="">Price:</label>
<input type="string" name="price" value="{{$estate->price}}" class="form-control">
{{$errors->first('price','<span class="help-block">:message</span>')}}
</div>
<div class="form-group {{$errors->has('info') ? 'has-error' : ''}}">
<label for="">Info:</label>
<textarea class="col-md-12 " rows="4" input type="text" name="info" id="info" class="form-control" > {{$estate->info}}</textarea>
</div>
</div>
<div class="container">
<button type="Submit" class="btn btn-default">Update</button>
{{Form::close()}}
</div>
これを交換したと思います
return Redirect ::route ('estates.edit')
これとともに
return Redirect ::route ('estates.edit', ['id' => $id])