【问题标题】:Laravel validation does not work with many fieldsLaravel 验证不适用于许多字段
【发布时间】:2020-07-03 05:20:34
【问题描述】:

我有一个奇怪的 Laravel 行为。如果我用少于 10 个字段来验证我的表单,那么一切正常,包括显示错误消息(例如“field1 is required”):

public function myFctName(Request $request)
{
    $validator = Validator::make($request->all(), [
            'year' => 'required',
            'field1' => 'required',
            'field2' => 'required'
    ]);
    if ($validator->fails()) {
        return back()->withErrors($validator->errors())->withInput();
    }

    return view('companiesView');
}

我的表单有 23 个字段。一旦我添加了大约 10 个字段,如果没有验证错误,一切都会正常工作。这是第二个示例代码:

public function myFctName(Request $request)
{
    $validator = Validator::make($request->all(), [
            'year' => 'required',
            'field1' => 'required',
            'field2' => 'required',
            'field3' => 'required',
            'field4' => 'required',
            'field5' => 'required',
            'field6' => 'required',
            'field7' => 'required',
            'field8' => 'required',
            'field9' => 'required',
            'field10' => 'required',
            'field11' => 'required',
            'field12' => 'required',
            'field13' => 'required',
            'field14' => 'required'
    ]);
    if ($validator->fails()) {
        return back()->withErrors($validator->errors())->withInput();
    }

    return view('companiesView');
}

如果出现验证错误,重定向 (back()) 仍然有效。但是,没有显示错误消息。

如果我将return back()->withErrors($validator->errors())->withInput(); 行更改为return back()->withErrors($validator->errors());,则会显示错误消息。所以问题一定出在withInput() 函数上。

此外,使用 withInput() 部分后,Chrome 控制台中会出现警告(但在 Firefox 中不会发生):Set Cookie header is ignored in response from url: ... Cookie length should be less than or equal to 4096 characters。在这一点上,我没有积极地对 Cookie 做任何事情。

有谁知道问题出在哪里?

【问题讨论】:

  • 先清除浏览器cookie。
  • @SharifMohammadEunus 完成;不幸的是,我仍然遇到同样的错误。

标签: laravel laravel-validation


【解决方案1】:

问题出在会话驱动程序上。它可能设置为只能存储 4096 个字符的 cookie。将其设置为文件、数据库或 redis。

在 .env 中

SESSION_DRIVER=cookie

SESSION_DRIVER=database

【讨论】:

    【解决方案2】:

    withInput() 在后台使用 cookie/session 来存储旧值。也许那些正在泛滥。

    替代品可以是

    $request->validate([
      'year' => 'required',
    ]);
    
    
    
    <input type="text" name="year" value="{{old('year')}}">
    
    

    用于显示错误

    @if($errors->any())
    
     @foreach($errors->all() as $error)
       {{$error}}
     @endforeach
    
    
    @endif
    

    【讨论】:

    • 感谢您的回答!我尝试了$request-&gt;validate()-stuff - 不幸的是,我仍然收到同样的错误。该表单包含 23 个文本输入(没有图像等),它们的名称介于 4 到 20 个字符之间 - 所以这里没有什么特别之处。 Laravel 应该可以处理这种数据量吧?
    • 是的。给我你的表格和控制器。我想试一试。
    • 我已经上传了两个文件(最简单的版本):s000.tinyupload.com/index.php?file_id=82013323074319045773非常感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2015-07-28
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多