从重定向Laravel访问控制器中的错误

ric*_*een 6 validation controller view laravel-4

正如您所料,当验证失败时,我创建了一个重定向.

return Redirect::to('search')->withErrors($v->messages())
Run Code Online (Sandbox Code Playgroud)

我可以在视图中访问它而没有问题,但我想做一些不同的事情.我有一个ErrorPartial.blade.php,我希望将其传递给我的搜索视图.

return View::make('search.searchForm')
        ->with('title', 'Search Page')
        ->with('components', Subject::select('Component')->distinct()->get())
        ->with('measurementRow',$measurementRow)
        ->with('races', Race::parseRaceTable())
        ->with('errorPartial', View::make('errorPartial')
                ->with('errors',$v->messages())
                ->render())
        ;
Run Code Online (Sandbox Code Playgroud)

问题是我无法在此控制器功能中访问$ v.我可以访问将要传递给视图的错误吗?我试过这个:

return Redirect::to('search')->withErrors($v->messages())
            ->with('v', $v);
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误.

Serialization of 'Closure' is not allowed
Run Code Online (Sandbox Code Playgroud)

我可以在我的搜索视图中创建部分视图,但我想知道它们是否是这样做的一种方式.如果有人知道哪个更有效率或GPP那么我也不介意知道这一点.

谢谢

ric*_*een 8

回答问题将其作为一个悬而未决的问题关闭.

Laravel将错误存储在Session中,可以像这样访问:

$errors = Session::get('errors');
Run Code Online (Sandbox Code Playgroud)


Yev*_*yev 5

Laravel将错误存储在Session中。

并且Blade中可用的所有功能都来自ViewErrorBag类。

use Illuminate\Support\ViewErrorBag;
...
$errors = session()->get('errors', app(ViewErrorBag::class));
Run Code Online (Sandbox Code Playgroud)

首选此方法,因为如果会话中没有错误,它将返回空错误包。这意味着您可以调用$errors->any()此对象而不会期望出现错误提示

在null上调用成员函数any()

您始终可以按照以下建议在源代码中找到实现

$errors变量由Illuminate\View\Middleware\ShareErrorsFromSession中间件绑定到视图, 中间件由web中间件组提供。应用此中间件时,$errors变量将始终在您的视图中可用,从而使您可以方便地假定$errors变量始终是定义的并且可以安全使用。

文献资料

  • 很好的答案,因为它是“Laravel 方式”。这应该是公认的答案。 (2认同)