Laravelのバリデーションを使ってみる

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>

以下のようなフォームができました。

try-the-validation-of-laravel01

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

try-the-validation-of-laravel02

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

try-the-validation-of-laravel03

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

try-the-validation-of-laravel04

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930