【问题标题】:Looping through validation errors in view在视图中循环验证错误
【发布时间】:2014-03-24 16:09:36
【问题描述】:

我正在使用 Laravel 的表单验证功能,并试图找出如何在我的视图中遍历表单错误。目前,我正在使用以下代码成功验证表单:

public function create()
{
    $validator = Validator::make(
        Input::all(),
        array(
            'username' => 'required|alpha_num|unique:users',
            'email' => 'email|unique:users',
            'password' => 'required|min:6',
            'passwordConf' => 'required|same:password'
        )
    );

    if ($validator->fails())
    {
        return Redirect::to('join')->withErrors($validator);
    }

    return View::make('user/join')->with();
}

验证器成功验证表单并在验证失败时重定向到join 路由。显然,我还想向用户显示验证消息。我有一个 master.blade.php 布局文件,我的所有视图都扩展了它,并且在布局中我有以下代码:

@if (Session::has('errors'))
    <div class="alert alert-danger">
        @foreach (Session::get('errors') as $error)
            Test<br />
        @endforeach
    </div>
@endif

这似乎成功了一半。如果存在验证错误,警告 div 会显示在页面上,但不会输出验证错误。这表明 Session::has('errors') 正在返回 true,但是我显然没有正确地遍历验证错误。

如何遍历通过withErrors 发送到视图的验证错误?

【问题讨论】:

    标签: php validation laravel laravel-4


    【解决方案1】:

    有一个自动的$errors 变量传递给您的视图。您不必直接检查会话。

    @foreach ($errors->all() as $error)
        {{ $error }}<br/>
    @endforeach
    

    这是来自the docs的引述:

    请注意,我们不必将错误消息显式绑定到 GET 路由中的视图。这是因为 Laravel 将始终检查会话数据中的错误,并在它们可用时自动将它们绑定到视图。 因此,重要的是要注意 $errors 变量将始终在您的所有视图中,在每个请求中都可用,让您可以方便地假设 $errors 变量始终已定义并且可以安全使用。 $errors 变量将是 MessageBag 的一个实例。

    【讨论】:

    • 是的,但连“测试”都没有出现。如果我将其更改为 {{ $error }} 我会得到相同的结果,警报 div 会显示但没有任何错误消息。
    • 这是一个不充分的答案,因为$errors 包含多种结构来区分不同类型的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多