验证后,我想传递一些额外的数据以供查看。但是,我无法发送。
我的控制器就像
public function test()
{
$validator = Validator::make(
request()->all(),
[ 'ziptest' => 'regex:/^([0-9]{3}-[0-9]{4})$/']
);
$errors = $validator->errors();
if($errors->any()) {
return back()
->withErrors($errors)
->withTitle('Data From Controller')
->withInput();
}
return 'success';
}
在我的刀片中,我想检查标题是否通过。所以在我的刀片视图中,我有
@if($errors->any())
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endif
@if(isset($title))
<p>{{ $title }}</p>
@endif
但是,错误部分显示正确。但没有标题。为什么不起作用?
我也尝试过用这种方式发送标题。
return back()->withErrors($errors)
->with('title','Data From Controller')
->withInput();
它也不起作用。
我在SO中进行了搜索,发现了一些与从控制器传递数据到视图有关的类似问题。但是,我的情况有些不同。
答案 0 :(得分:2)
在您的示例中,您将重定向回先前的位置。当您使用with*
进行重定向时,信息会刷新到会话中,而不是像直接返回视图一样直接提供给视图。
要使其与示例兼容,必须检查session('title')
才能从重定向中获取闪烁的标题。
答案 1 :(得分:1)
您的第二种方法几乎是正确的。
return back()->withErrors($errors)
->with([
'title' => 'Data From Controller'
])
->withInput();
注意数组符号
答案 2 :(得分:0)
在这里使用array_merge
方法
$errors = $validator->errors();
if($errors->any()) {
$newErrors = array_merge($errors->toArray(),['title' => 'Data From Controller']);
return back()
->withErrors($newErrors)
->withInput();
}
答案 3 :(得分:0)
您在验证挂钩后是否尝试过,但是它将返回错误包中的数据
$validator->after(function ($validator) {
$validator->errors()->add('someField', 'Somedata');
});
我想知道您从何处调用视图,因为我看到您的test()
方法只执行验证部分,就您而言,您可以通过它传递数据,但是通过验证,我认为您在错误包中可以发送数据进行查看。