验证后如何传递额外的数据?

时间:2019-04-15 05:34:57

标签: laravel laravel-5.7

验证后,我想传递一些额外的数据以供查看。但是,我无法发送。

我的控制器就像

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中进行了搜索,发现了一些与从控制器传递数据到视图有关的类似问题。但是,我的情况有些不同。

4 个答案:

答案 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()方法只执行验证部分,就您而言,您可以通过它传递数据,但是通过验证,我认为您在错误包中可以发送数据进行查看。