前回は Form の入力値チェックを行いました。今回は、Form Request という機能を使って、入力値のチェック方法を修正します。
Form Request の作成
artisan を使って、Article 用の Form Request を生成します。
php artisan make:request ArticleRequest
app/Http/Requests/ArticleRequest.php が作成されました。
<?php // app/Http/Requests/ArticleRequest.php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ArticleRequest extends FormRequest { public function authorize() { return false; } public function rules() { return [ // ]; } }
ArticleRequest.php の編集
Article 用に内容を編集します。
<?php // ... class ArticleRequest extends Request { public function authorize() { return true; // ① } public function rules() { return [ // ② 'title' => 'required|min:3', 'body' => 'required', 'published_at' => 'required|date', ]; } }
① authorize メソッドではリクエストに対する権限を設定します。例えば、現在ログイン中のユーザに権限が無ければ、false を返します。今のところ誰でも Articles データを追加できるように true を返しておきます。
② rules メソッドでは、バリデーションルールを返します。
Controller
ArticlesController.php の store メソッドで ArticleRequest を使うように修正します。
<?php // app/Http/Controllers/ArticlesController.php use App\Http\Requests\ArticleRequest; // ... class ArticlesController extends Controller { // ... public function store(ArticleRequest $request) { // ① // ここでの validate が不要になった Article::create($request->validated()); return redirect('articles'); } }
① store メソッドで受け取るクラスを Illuminate\Http\Request から App\Http\Requests\ArticleRequest に変更しました。これだけで、今まで store メソッド内で行っていた、validate が不要になります。エラーがあった時の前画面へのリダイレクトも ArticleRequest が行ってくれます。コントローラがスリムになり、超クールです。
念の為、いままで通り入力チェックが効くか、動作確認をお忘れなく