バリデーションの設定はコントローラーに記述することもできるが、フォームリクエストのファイルを別途作成してそちらに記述した方が見通しが良くなる。
バリデーションの詳細は公式マニュアルを参照。ただし、何故かコントローラー内に直接記述する方法しか掲載されていない(別のページにフォームリクエストの記述があるのかもしれないが見つからない)。
Laravel 6.x バリデーション
Laravelのフォームリクエストのバリデーション設定方法
フォームリクエスト作成
# バリデーションの設定ファイルを作成
$ php artisan make:request PostRequest
app/Http/Requests/PostRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostRequest extends FormRequest
{
// 認証
// ユーザーがこのリクエストの権限をもっているかを確認
// ex. 掲示板で自分が投稿したコメントを編集する(= 他人のコメントは編集できない)等
public function authorize()
{
// 権限の確認が不要なときは常にtrue
// もしくはこのメソッド自体を消してしまっても良い
return true; // falseだとページが表示されなくなる
}
// バリデーションを設定
public function rules()
{
return [
'keyword' => 'max:50' // 50文字まで
];
}
// 任意のエラーメッセージを設定
public function messages() {
return [
'keyword.max' => "検索キーワードは50文字までです。"
];
}
}
app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\PostRequest; // フォームリクエスト(↑で作ったファイル)
use App\Post;
class PostViewController extends Controller
{
public function index(PostRequest $request) { // 引数にフォームリクエストを設定
// パラメータからキーワードを取得(デフォルト値は空文字)
$keyword = trim($request->input('keyword', ''));
// キーワード検索
$posts = POST::where(['title', 'LINKE', "%{$keyword}%"]);
// ビューへ
$params = array('posts' => $posts,
'keyword' => $keyword);
return view('/index', $params);
}
}
resources/views/index.blade.php
@if ($errors->any())
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
@error('keyword')
{{@message}}
@enderror
@foreach($posts as $post)
@endforeach