如何检查具有变量名的错误袋

时间:2019-01-25 08:26:56

标签: php laravel error-handling

在Laravel(版本5.0,由于服务器兼容性)中,我可以使用named errorbags将错误发送回同一视图中存在多个表单的视图上的表单(例如,登录表单和注册表单) )。例如,我会这样:

控制器

public function login(Request $request)
{
    $rules = [
        'email' => 'required|email',
        'password' => 'required'
    ];
    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator, 'loginForm');
    }
    // do something if validation was succesful
}

查看(在登录表单下添加)

@if ($errors->hasBag('loginForm'))
    <ul class="fa-ul">
        @foreach ($errors->loginForm->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

当我这样做时,一切工作都很好。但是,现在对于我不知道消息袋名称的视图,我需要做同样的事情。在此视图中,我显示数据库中的所有项目,并且每个项目都需要一个表单。 (是的,在我的情况下有必要这样做)。

特别是,上述控制器和视图看起来更像这样:

控制器

public function login(Request $request, $formId)
{
    $rules = [
        'email' => 'required|email',
        'password' => 'required'
    ];
    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator, $formId);
    }
    // do something if validation was succesful
}

查看(在每个表单下添加该表单,并使用@foreach()循环创建表单)

@if ($errors->hasBag($formId))
    <ul class="fa-ul">
        @foreach ($errors->$formId->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

在这里$errors->hasBag($formId)可以很好地工作,但是$errors->$formId->all()不能正常工作,所以我的问题是:有什么办法可以做到这一点?

更新1

dump($errors->getBags())给出(错误在荷兰): image 1 这样袋子就存在了。

dump($error->$bag)给予: image 2

更新2

现在可以了,我不知道是什么引起了问题。。。我改变的一件事是在包名前加了一个下划线,因为它们在哪里编号。

1 个答案:

答案 0 :(得分:0)

经过一些测试,我发现问题是我在使用数字(id)作为消息袋的名称。通过在每个名称之前添加下划线(_)可以解决该问题,从而使其成为合法的变量名称。