我有一个页面,该页面的表单带有选择菜单,如果表单中存在某些验证错误,则使用"@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);
”都不会出现。
答案 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;