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

woh*_*he1 5 php error-handling laravel

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

控制器

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
}
Run Code Online (Sandbox Code Playgroud)

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

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

当我这样做时,一切都工作得很好。但是,现在我需要对不知道消息包名称的视图执行相同的操作。这是一个视图,我在其中显示数据库中的所有项目,并且每个项目都需要一个表单。(是的,就我而言,有必要这样做)。

特别是,前面提到的控制器和视图看起来更像是这样:

控制器

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
}
Run Code Online (Sandbox Code Playgroud)

视图(在每个表单下添加此内容,表单是通过@foreach()循环创建的)

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

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

更新1

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

dump($error->$bag)给出: 图2

更新2

现在它可以工作了,但我不知道是什么导致了问题......我改变的一件事是在包名称之前添加下划线,因为它们是数字。

woh*_*he1 1

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