のぐそんブログ

暗いおじさんがシコシコ書くブログです。

Laravelでのバリデーション処理メモ その1

バリデーションを行う

フォームのバリデーション処理です。

routes/web.php

Route::get('hoge', 'HogeController@index');
Route::post('hoge', 'HogeController@post');

HogeController.php

class HogeController extends Controller
{
    public function index(Request $request)
    {
        return view('hoge.index',['msg'=>'入力']);
    }

    public function post(Request $request)
    {
        $validate_rule = [
            'name' => 'required',
            'mail' => 'email',
            'age' => 'numeric|between:0,100',
        ];

        $this->validate($request,$validate_rule);


        return view('hoge.index',['msg'=>'入力成功!']);
    }
}

hoge/index.babel.php

<table>
    <p>{{$msg}}</p>
    <form action="/hello" method="post">
        {{csrf_field()}}
        <tr>
            <th>name</th>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <th>mail</th>
            <td><input type="text" name="mail"></td>
        </tr>
        <tr>
            <th>age</th>
            <td><input type="text" name="age"></td>
        </tr>
        <tr>
            <th></th>
            <td><input type="submit" value="send">
            </td>
        </tr>
    </form>
</table>

表示

バリデーション処理について

バリデーションルールは以下のように設定します。

//`項目名` => 'ルール'
'name' => 'required'

複数設定する場合は|を利用します。

// 値が数値 且つ 0 ~ 100の間
'age' => 'numeric|between:0,100'

バリデーションの実行は以下です。

 $this->validate($request,$validate_rule);

input formの値を保持

バリデーションエラーになった場合に、入力したinputフィールドが空にってしまいます。 入力した値を保持する為には、以下のようにします。

<input type="text" name="name" value="{{old('name')}}">

バリデーションエラーを表示する

入力値に対してエラーを表示するには以下のようにします。

hoge/index.babel.php

<table>
    <p>{{$msg}}</p>
    @foreach($errors->all() as $error)
        <p> - {{$error}}</p>
    @endforeach
    <form action="/hello" method="post">
    ...
</table>

$erorrsの中身

$erorrsは以下のような連想配列になっています。

{
    "name":["The name field is required."],
    "mail":["The mail must be a valid email address."],
    "age":["The age must be a number."]
}

その為特定のエラーが発生しているかを判定して表示することができます。

@if($errors->has('name'))
    $errors->get('name');
@endif

バリデーションのルール

ルール 内容
accept チェックボックスに使います。チェックされている、されていないの判定で利用します
active_url 有効なアドレスかチェックします
url urlの形式になっているかチェックします
after: 日付 指定した日時より後かをチェックします
after_or_equal:日時 指定した日時より後、もしくは同じであるかをチェックします
before: 日付 指定した日時より前かをチェックします
before_or_equal:日時 指定した日時より前、もしくは同じであるかをチェックします
alpha 入力されたテキストが全てアルファベットかをチェックします
alpha-dash アルファベット、ハイフン、アンダースコアかをチェックします
alpha-num アルファベット、数値かをチェックします
array 配列かをチェックします
between:min,max 数値の値で、指定の範囲の値かをチェックします
boolean 真偽値かをチェックします
date 日時のデータかをチェックします
date_format:フォーマット 指定の日時のフォーマットと一致するかをチェックします
different:フィールド 指定したフィールドと異なる値かをチェックします
same:フィールド 指定したフィールドと同じ値かをチェックします
digits:桁数 指定した桁数と値の桁数が同じかチェックします
digits_between:min,max 指定した桁数と範囲に値の桁数が入るかをチェックします
distinc 配列内に同じ項目がないかチェックします
email メールアドレスの形式かをチェックします

などなど。。。。 まだまだ沢山あるので以下を参照してください。

Laravelのバリデーションで指定できる内容をざっくりまとめ直しました。