いくつかの検証を通過するLaravelフォームがあります。明らかに、検証が失敗した場合は、ユーザーをフォームにリダイレクトして、間違いを警告してもらいたいと思います。また、フォームがかなり大きいので、ユーザーがデータを再入力する必要はありません。これがフォームです(このメッセージのサイズを小さくするために大部分を切り取っています)
:@layout('templates.main')
@section('content')
@if(Session::has('validation_errors'))
<ul class="form_errors">
@foreach($errors as $error)
{{$error}}
@endforeach
</ul>
@endif
{{ Form::open('account/create', 'POST') }}
<table>
<tr>
<td>{{ Form::label('dealer', 'Dealer') }}</td>
<td>{{ Form::select('dealer', array('1' => 'Dealer #1', '2' => 'Dealer #2')) }}</td>
<td>{{ Form::label('amount', 'Amount') }}</td>
<td>{{ Form::text('amount', Input::old('amount')) }}</td><!--Here is where I'm testing for old input-->
</tr>
<tr>
<td>{{ Form::label('date', 'Date') }}</td>
<td>{{ Form::date('date', NULL, array('class' => 'date_picker')) }}</td>
<td>{{ Form::label('installation', 'Installation #') }}</td>
<td>{{ Form::input('text', 'installation') }}</td>
</tr>
<tr>
<td colspan="4">{{ Form::textarea('notebox', NULL, array('id' => 'notebox')) }}</td>
</tr>
<tr>
<td colspan="4">{{ Form::submit('Submit') }} {{ Form::reset('Reset') }}</td>
</tr>
</table>
{{ Form::close() }}
@endsection
フォームが送信されると、フォームを処理するコントローラーは次のようになります。
public function post_create() {
//Validate it in the model
$validation = Account::validate(Input::all());
if($validation->fails()){
return Redirect::to('account/create')
->with_input()
->with('validation_errors', true)
->with('errors', $validation->errors->all('<li>:message</li>'));
}
else {
return "passed";//for debugging purposes
}
}
そして最後に、アカウントモデルは次のとおりです。
class Account extends Eloquent {
public static function validate($input) {
//Validation rules
$rules = array(
'firstname' => 'required',
'lastname' => 'required',
//etc...
);
//Custom validation messages
$messages = array(
'firstname_required' => 'A first name is required.',
'lastname_required' => 'A last name is required.',
//etc...
);
//Pass it through the validator and spit it out
return Validator::make($input, $rules, $messages);
}
}
したがって、フォームを意図的に無効にしてこれをテストすると、アカウント/作成フォームにリダイレクトされますが、検証エラーは表示されず、古い入力は保存されません(Input::old()
金額テキストボックスにのみ添付されます)。