Laravel

【Laravel】フォームリクエストを使ったバリデーション方法

「フォームリクエスト」とは、バリデーション処理を外部クラスにまとめることができる機能です。
任意のリクエストで呼び出すことが可能で、外部ファイル化することでコントローラー内のコードもスッキリさせることができます。

フォームリクエストの作成

artisanコマンドを使い作成します。(コマンドの方が楽です)
前回の続きで BoardController の拡張用ファイルなので「BoardRequest」とします。

[php]
$ php artisan make:request BoardRequest

-- 成功したら以下のメッセージが出る
Request created successfully.
[/php]

上記のコマンド発行で「app\Http\Requests\」配下に「BoardRequest.php」が作成されます。

作成された直後の内容

[php]
authorizeメソッド

このフォームリクエストを利用が許可されているかを示すアクション。trueを返せば許可され、falseが帰った場合は403ステータスのレスポンスが返されます。
特になにも判定がない場合は常にtrueを返します。

rulesメソッド

バリデーションの検証ルールを設定するアクション。コントローラー内に書いた検証ルールを書けば良いとのこと。

フォームリクエスト修正

[php]
'required|max:10',
'email' => 'email',
'message' => 'required|max:50',
];
}
}
[/php]

authorizeメソッドは true を返すように変更。
rulesメソッドはコントローラー内に書いていた検証ルールをそのままコピペ。

BoardControllerを編集

次に前回作成したコントローラーを編集。

(1)フォームリクエストを使用する旨をコントローラーに記述
(2)addメソッド内に書いていた検証ルールを削除

[php]
use App\Http\Requests\BoardRequest; // ←★(1)追加

class BoardController extends Controller
{
public function index(Request $request)
{
// 略
}

public function add(BoardRequest $request) // (1)Request → BoardRequestに変更
{
$data = [
'msg' => '正しく入力されました!',
];
// (2)このあたりにあったバリデーション設定を削除
return view('board.index', $data);
}
}
[/php]

送信結果

フォームに何も記入せずに「送信」ボタンを押したところです。
前回と同じく英語のメッセージが表示されました。どうやら動作は問題なくできているようです。

メッセージのカスタマイズ(オーバーライド)

動作の確認ができたので、次にエラーメッセージを日本語化してみたいと思います。
BoardRequestクラスへ「messages」メソッドを追加し、継承元で設定されているメソッドをオーバーライドする形をとります。

[php]
/**
* エラーメッセージを日本語化
*
*/
public function messages() {
return [
'subject.required' => '件名を入力してください',
'subject.max' => '件名は10文字以内で入力してください',
'email.email' => 'メールアドレスとして正しい形式ではありません',
'message.required' => 'メッセージを入力してください',
'message.max' => 'メッセージは50文字以内で入力してください',
];
}
[/php]

'項目名'.'ルール名' => 'メッセージ'

の形でメッセージ情報を作成。

メッセージ情報はそれぞれのフィールドに用意した1つ1つのルールごとに用意します。
1項目に複数のルールが設定されている場合はそれぞれのメッセージを用意する必要があり、ルールに対して記述していないメッセージがある場合は英語のデフォルトメッセージが表示されます。

変更後の画面

-Laravel
-,