背景
LaravelでRequestFormを使ったバリデーションを実装中、
空のFormを送信するとバリデーションにひっかかって正しくリダイレクトされるが、
FormRequestに設定したエラーメッセージが表示されない問題が発生。
原因を切り分けてみるとFormRequestの設定に問題はなく、対象のformの項目数を減らすと正しくエラーメッセージが表示されたので、
項目が一定数以上あるフォームで発生するのは分かったのですが、
根本的な原因が分からずに詰まってしまったのでその原因と解決策をメモ。
結論
/config/session.php
の'driver'
の項目にfileを指定することで解決しました。
.envの環境変数で指定している場合は対象の値をfileに変更すると設定できます。
(※Dockerを利用している場合はDockerfileの環境変数の設定も確認)
結論(詳細)
こちらに似たような質問と答えが載ってました。
stackoverflow - Laravel form validation issues (session size limit?)
RequestFormのエラーメッセージはsessionに保存されてviewに渡されており、
sessionドライバーにcookieを指定しているとcookieの容量の上限で保存できないのが原因のため、sessionドライバーにfileを使うと解決するとのことでした。
sessionドライバーの指定は/config/session.php
の'driver'
の項目で指定できるので、cookie
を使っているとをfile
に書き換えて読み込み直すと変更できます。
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here.
|
| Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "dynamodb", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'file'),
/* ~~~~~ 省略 ~~~~~~ */
];
.envの環境変数で指定してる場合はそちらの値(僕の場合はSESSION_DRIVER
)にfile
を指定すると変更できます。
SESSION_DRIVER=file
余談
僕の環境の場合、上記のサイトのように/config/session.php
と.env
のSESSION_DRIVER
の値はどちらもfileを指定していたのですが、Dockerfileの環境変数の設定でSESSION_DRIVER
にcookie
を指定していたため、反映されずに詰まってました。
引用