8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel FormRequestでバリデーション

Last updated at Posted at 2019-11-22

####バリデーション
#####参考サイト
Laravelのvalidationメソッドでバリデーションを実装する入門編(日本語エラーメッセージ付き)
Laravelのフォームリクエストクラスでバリデーションロジックをコントローラから分離する
Laravelのバリデーションにはフォームリクエストを使おう
Laravel5.6でバリデーションなどのエラーメッセージを日本語化する方法

#####ItemRequestクラス

app/Http/Requests/ItemRequest
---
class ItemRequest extends FormRequest
{          
---
    public function rules()
    {
        //バリデーションルール
        return [
            'name' => 'required|string|max:191',
            'content' => 'required|string|max:191',
        ];
    }
}

・注意点 - バリデーションルールはカンマ抜けのsyntax errorレベルでも class does not existエラーになる。
#####コントローラー

app/Http/Controller/ItemController
<?php                                  
namespace App\Http\Controllers;        
                                       
use Illuminate\Http\Request;           
use App\Http\Requests\ItemRequest; //クラス宣言   
use App\Item;         
                                       
class ItemController extends Controller
{                                      
---中略
    //引数の型をバリデーションクラスにする
    public function create(ItemRequest $request) {
        //追加処理                                                                
        $name = $request->input('name');                                      
        $content = $request->input('content');                                
        $item = Item::create(compact('name', 'content'));
        return redirect('item/');
    }
}

$request の型を変更するだけでバリデーションされる。
バリデーション ->
OK -> メソッド処理
NG -> 元のビューにリダイレクト

resource/view/sample.blade.php
---
//バリデーションエラーの表示
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    //バリデーションエラーなら元データを代入
    <?php
    $id = old('id');
    $name = old('name');
    ?>                                             
@endif
<form method="post" action="{{ route($address) }}">                                   
    {{ csrf_field() }}                                                                
    <div><label>商品名:</label> <input type="text" name="name" value="{{ $name }}"></div>
    <div><label>説明:</label> <textarea name="content">{{ $content }}</textarea></div>
</form>

注意 : レイアウトでもバリデーションできますが、old()が取得できませんでした。

#####エラーメッセージを日本語にする
/config/app.php -> locale = jp
参考サイトからエラーメッセージファイルをダウンロード
/resources/lang/en -> コピーしてjpを作成
/lang/jpにファイルを上書きコピー

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?