Laravelのバリデーションを使ってみます。
サンプルコード
routes.php
Route::get('/post', 'PostController@getIndex');
Route::post('/post', 'PostController@postIndex');
app\Http\Controllers\PostController.php
post時にバリデーションチェックを行うようにします。
<?php
namespace App\Http\Controllers;
use Request;
use Redirect;
use Validator;
class PostController extends Controller
{
public function getIndex()
{
return view('post.index');
}
// バリデーションのルール
public $validateRules = [
'username'=>'required',
'number'=>'required|integer|digits:10',
'password'=>'required|min:8',
'mail'=>'required|email',
'age'=>'numeric',
'body'=>'max:500'
];
// バリデーションのエラーメッセージ
public $validateMessages = [
"required" => "必須項目です。",
"integer" => "整数で入力してください。",
"number.digits" => "10桁で入力してください。",
"password.min" => "8文字以上で入力してください。",
"email" => "メールアドレスの形式で入力してください。",
"numeric" => "数値で入力してください。",
"body.max" => "500文字以内で入力してください。"
];
public function postIndex()
{
// postしたデータをすべて取得
$data = Request::all();
//バリデーションをインスタンス化
$val = Validator::make(
$data,
$this->validateRules,
$this->validateMessages
);
//バリデーションNGの場合
if($val->fails()){
return redirect('/post')->withErrors($val)->withInput();
}
return 'OK!';
}
}
Validatorのmakeメソッドでバリデーションのインスタンスを作成しています。
第1引数にバリデーションを行うデータ、第2引数にバリデーションのルール、第3引数にバリデーションのエラーメッセージを設定します。
post\index.blade.php
エラーの内容は$errorsから取得できます。
<form action="/post" method="POST" novalidate>
<dl>
<dt>ユーザー名<span class="required">(必須)</span></dt>
<dd>
<input name="username" type="text">
@if($errors->has('username'))<p class="error">{{ $errors->first('username') }}</p> @endif
</dd>
</dl>
<dl>
<dt>認証番号<span class="required">(必須・10桁)</span></dt>
<dd>
<input name="number" type="text">
@if($errors->has('number'))<p class="error">{{ $errors->first('number') }}</p> @endif
</dd>
</dl>
<dl>
<dt>パスワード<span class="required">(必須・8文字以上)</span></dt>
<dd>
<input name="password" type="text">
@if($errors->has('password'))<p class="error">{{ $errors->first('password') }}</p> @endif
</dd>
</dl>
<dl>
<dt>メールアドレス<span class="required">(必須)</span></dt>
<dd>
<input name="mail" type="text">
@if($errors->has('mail'))<p class="error">{{ $errors->first('mail') }}</p> @endif
</dd>
</dl>
<dl>
<dt>年齢</dt>
<dd>
<input name="age" type="text">歳
@if($errors->has('age'))<p class="error">{{ $errors->first('age') }}</p> @endif
</dd>
</dl>
<dl>
<dt>内容(500文字以下)</dt>
<dd>
<textarea name="body"></textarea>
@if($errors->has('body'))<p class="error">{{ $errors->first('body') }}</p> @endif
</dd>
</dl>
<div>
<input type="submit" value="送信">
</div>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
以下のようなフォームができました。

何も入力せずに送信すると、以下のようになります。

桁数違いや正しくないメールアドレスを入力してみます。

以下のようにエラーが表示されました。

【参考サイト】
- バリデーション 5.1 Laravel
- エラーメッセージとビュー | WinRoadのLaravel4初心者講座
- Laravelのバリデーションで指定できる内容をざっくりまとめ直しました。 – Qiita
コメントが承認されるまで時間がかかります。