LoginSignup
1
1

More than 3 years have passed since last update.

【Laravel】Formの項目が多い場合にsessionに保存したエラーメッセージが表示されない問題

Posted at

背景

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に書き換えて読み込み直すと変更できます。

/config/session.php

<?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.envSESSION_DRIVERの値はどちらもfileを指定していたのですが、Dockerfileの環境変数の設定でSESSION_DRIVERcookieを指定していたため、反映されずに詰まってました。

引用

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1