####バリデーション
#####参考サイト
Laravelのvalidationメソッドでバリデーションを実装する入門編(日本語エラーメッセージ付き)
Laravelのフォームリクエストクラスでバリデーションロジックをコントローラから分離する
Laravelのバリデーションにはフォームリクエストを使おう
Laravel5.6でバリデーションなどのエラーメッセージを日本語化する方法
#####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エラーになる。
#####コントローラー
<?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 -> 元のビューにリダイレクト
---
//バリデーションエラーの表示
@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にファイルを上書きコピー