您知道为什么没有出现命名的袋消息吗?

时间:2018-08-01 11:03:10

标签: php laravel

我有一个页面,该页面的表单带有选择菜单,如果表单中存在某些验证错误,则使用"@include('includes.errors')“来显示验证错误。但是在同一页面中,我有一个按钮,当用户单击它会显示一个模式,用户可以在其中介绍主题,发送电子邮件的消息。在该模式下,我也有“ @include('includes.errors')”。

问题:因此问题在于,如果模态中的表单中存在验证错误,因为用户未填写主题或信息,则错误会同时出现在模态中具有选择菜单的表单上方的页面。另外,如果表单中的某些验证错误带有选择菜单,并且用户打开了验证方式,验证错误也会出现在验证方式中。

使用命名包解决此问题不起作用。例如,在storeQuantities()中有:

public function storeQuantities(Request $request, $id, $slug = null)
{
     $validator = $request->validate([
        'rtypes' => ['required', 'array', new RegistrationTypeQuantity],
    ]);

    // dd('test'); dont shows 

    if ($validator->fails())
    {
        return redirect()->back()->withErrors($validator, 'quantitiesError');
    }
    ...

}

在contactOrganizer中:

public function contactOrganizer($id, Request $request)
   $validator =  $this->validate($request, $rules, $customMessages);
    // dd('test'); dont shows 
    if ($validator->fails())
    {
        return redirect()->back()->withErrors($validator, 'contactErrors');
    }
}

然后使用:

 @include('includes.errors', ['errors' => $errors->quantitiesError])

在模式中:

@include('includes.errors', ['errors' => $errors->contactErrors])

但是它不起作用,在这两种情况下,袋子总是空的,分别是“ {{dump($errors->contactErrors)}}”和“ {{dump($errors->quantitiesError)}}”,例如:

"MessageBag {#336 ▼
#messages: []
#format: ":message"
}"

问题似乎是因为“ $validator = $this->validate($request, $rules, $customMessages);”中存在一些错误,此行之后的任何代码(如“ dd('test);”都不会出现。

1 个答案:

答案 0 :(得分:0)

使用$this->validate时,Laravel将自动将用户重定向到其先前的位置

您需要使用Validator::make代替Manually Creating Validators

$validator = Validator::make($request->all(), [
    'rtypes' => ['required', 'array', new RegistrationTypeQuantity],
]);
if ($validator->fails())
    // redirect with errors
}

不要伪造包含use Validator;