Laravel 表单验证问题(会话大小限制?)

Posted

技术标签:

【中文标题】Laravel 表单验证问题(会话大小限制?)【英文标题】:Laravel form validation issues (session size limit?) 【发布时间】:2020-05-04 05:26:18 【问题描述】:

我有一个包含大约 30 个输入的表单,需要对其进行验证。这是非常新鲜的 Laravel 安装,我在控制器中处理验证。这是一个简单的项目,所有内容基本上都来自 Laravel 文档,因此在代码本身方面没有太多可以向您展示的内容。

问题与失败字段的数量或规则的数量有关,但我无法理解。

如果我在未填写任何输入字段的情况下提交表单,验证将失败并且我被重定向回表单,但没有验证错误或旧输入数据。 如果我填写一个输入然后提交,同样的事情,我会被重定向回来,没有错误或我填写的输入的旧值。

然而,

    如果我填写 7 个输入字段并提交,一切正常。重定向后,这 7 个字段具有旧值,其余字段有错误消息。 如果我从验证规则数组中注释掉 7 条规则,显然它的工作方式与上述相同。 如果我使用Validator::make 并手动重定向回并使用->withErrors($validator),则错误会显示在表单中。同样,如果我在重定向上使用->withInput(),表单将包含所有旧数据。但是,将这两者结合使用,既不会返回错误,也不会返回旧数据。

发生此问题时,调试栏会显示 array:2 [ "old" => [] "new" => [] ] for _flash 和 session 似乎根本没有定义 errors_old_input

这是 100% 一致的,所以无论我填写或注释掉哪些规则或字段,这绝对是导致它的数量。

这两种情况同样发生 $request->validate($myRules);$v = Validator::make($request->all(), $myRules);

我没有从 Google 那里找到很多关于这种行为的信息。以防万一,我已将会话驱动程序更改为 file,但它没有帮助。

我目前在 XAMP 上运行。 (memory_limit=512M)

编辑

我的最终验证逻辑涉及一些“if-situations”,例如:

$v->sometimes('description', 'required|max:500', function ($input)
    return $input->publish == 1;
);

现在,当我利用这些情况时,我注意到它们实际上降低了我的问题的粗略“限制”。因此,通过添加这个单一的有时条件并从主规则数组中删除 description 规则,我只需要再填写 6 个字段即可使一切正常。

最后,表单肯定会为输入设置必需的属性,所以这个问题在现实生活中不会发生,但它仍然让我很烦恼,因为一定有什么原因导致了这个,以后可能会导致还有别的东西。

编辑2

我做了一个新的表格,有 22 个输入,并用逻辑命名它们:f1、f2、f3 等等,它工作得很好!

但更新了其中一些名称稍长的名称,例如:f1、f2long、f3、f4evenlonger 等,突然问题又回来了。然后我再次删除了几个字符,并找到了一个有时有效有时无效的地方。

如果输入字段的名称总共有 57 个字符,则一切正常 100%。如果我添加几个字符并且这个数字变为 63,它会变得不稳定并且有时会起作用 - 有时不会。如果总共有 70 个或更多字符,它永远不会起作用。

很明显有些东西限制了它,但是什么?

编辑3

嗯,这是会话大小限制..该死的,它花了很长时间才意识到。

我将“文件”定义为会话驱动程序,但它不会在它应该在的位置生成任何文件,所以它显然仍在使用“cookie”。 我给了 Win10 用户在 storage 文件夹(和子文件夹)中写入文件的权限,但它仍然不会在那里生成任何东西。

【问题讨论】:

你检查过 php.ini 文件中的max_input_vars 吗? @DilipHirapara 似乎被注释掉了,但现在我将它设置为 1000,但它没有帮助。 :/ 不过不错! 【参考方案1】:

最后它发生了,因为会话数据不适合 cookie。经过长时间调试(我确信问题完全出在其他地方)我将会话驱动程序更改为 filesession.php,但忘记更新 .env..

现在一切正常,使用file 和/或database 作为会话驱动程序。

【讨论】:

你救了我的命!我花了 2 天时间搜索,是的,这是因为使用 cookie 作为默认值进行了更改,然后它又回到了 file 但我的版本是 cookie.... 现在一切正常!

以上是关于Laravel 表单验证问题(会话大小限制?)的主要内容,如果未能解决你的问题,请参考以下文章

使用会话在登录表单上显示错误的问题

发送序列化的表单数据并接收带有表单和会话数据的 PHP Laravel 重定向

fiddler修改请求表单数据

Laravel 5.5 - 同时验证多个表单请求

Laravel CSRF 保护

Laravel 5.2 - 会话不会在路由更改中持续存在