【问题标题】:Laravel 5.2 validation errors-- error bag emptyLaravel 5.2 验证错误——错误包为空
【发布时间】:2023-04-01 05:25:01
【问题描述】:

我有一个运行 Laravel 5.2 的新站点 (Laravel Framework version 5.2.39)。注意:路由文件没有使用 web 中间件组,它不再需要并且可能导致此问题。

我对@9​​87654322@ 的store 方法进行了简单验证:

    $this->validate($request, [
        'ContactFirst' => 'required|max:25',
        'ContactLast' => 'required|max:25',
        'ContactRole' => 'required|max:25',
        'ContactEmail' => 'email|max:255',
        'ContactPhone' => 'max:255',
    ]);

当我故意使验证失败时,网站会重定向回表单,但错误包是空的,因此没有提供错误信息。

在表单视图 (resources/contacts/new.blade.php) 中,我将文档中的以下代码以及转储中放入:

{{var_dump($errors)}}
@if (count($errors) > 0)
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif

页面(如我所说)重定向回表单并填充输入。但是$errors 是空的并且没有任何消息被打印出来:

object(Illuminate\Support\ViewErrorBag)[285]
protected 'bags' => 
array (size=0)
  empty

【问题讨论】:

  • 你确定你没有使用 web 中间件(我认为这就是你在问题开始时的意思)。
  • @TiagoRL-- 是的,web 中间件未在routes.php 中应用

标签: php validation laravel laravel-5.2


【解决方案1】:

其实我不知道你的代码是否可行,因为没有确切的代码表明它会返回错误。

我确实使用$validator-&gt;fails() 进行验证检查。

检查这个例子:

$validator = Validator::make($request->all(), [
    'ContactFirst' => 'required|max:25',
    'ContactLast' => 'required|max:25',
    'ContactRole' => 'required|max:25',
    'ContactEmail' => 'email|max:255',
    'ContactPhone' => 'max:255',
]);

if ($validator->fails()) {
    return redirect()->back()->withErrors($validator)->withInput();
}




但我确实建议您创建扩展 Request 类的 ContactFormRequest 类并将其放入 store 参数中(屏幕截图:http://joxi.ru/eAO55BF4glwRmo):

<?php namespace App\Http\Requests;   

class ContactFormRequest extends Request {

    public function rules() {
        return [
            'ContactFirst' => 'required|max:25',
            'ContactLast' => 'required|max:25',
            'ContactRole' => 'required|max:25',
            'ContactEmail' => 'email|max:255',
            'ContactPhone' => 'max:255',
        ];
    }
}

然后在你的控制器store 方法中这样做:

public function store(ContactFormRequest $request) {
    // here write code as if validation is valid
}

如果在这个操作之后你仍然不能得到错误所以放:

<?php var_dump(get_defined_vars()) ?>

{{var_dump($errors)}}之前

【讨论】:

  • @num8er-- 我认为这是老方法。我正在使用此处记录的较新语法:laravel.com/docs/master/…
  • @user101289 旧方法更经典且可预测。但是如果我们坚持新的方式,那么我会编写自定义的 Request 类,它使用起来会超级灵活,因为验证规则不会垃圾控制器动作的主要逻辑,它保持动作代码干净。
  • @num8er--我同意你的看法--我只是想使用记录在案的格式,不知道为什么它不能正常工作
  • 您确定不需要电子邮件参数吗?也许你不能得到错误是主要问题?
  • @num8er-- 需要什么?在我的验证块中不需要它。还有什么可能需要它?
【解决方案2】:

这似乎与在 Homestead 上运行多个版本的类似网站时出错有关。销毁盒子并重建它解决了这个问题。

【讨论】:

    【解决方案3】:

    我正在使用相同的版本。这是我用来显示错误的内容。

    @if($errors->any())
    <ul class="alert alert-danger">
    @foreach($errors->all() as $error)
    <li>{{$error}}</li>
    @endforeach
    </ul>
    @endif
    

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 2016-06-17
      • 1970-01-01
      • 2023-04-03
      • 2016-08-17
      • 2016-06-11
      • 2017-07-01
      • 2016-05-28
      • 2017-01-20
      相关资源
      最近更新 更多