Laravel 5:404路线上的会话

fes*_*tie 6 php session http-status-code-404 laravel

这让我疯狂了几个星期:如何在404页面上提供会话?我只是将404错误页面嵌入到我的默认模板中.它还显示了导航栏和页脚,但是如何在404上保持用户登录?

在404 Auth :: check()上总是返回false,其他特定于会话的其他内容为null或为空.

如何在(404)错误页面上启用会话?

Kev*_*uno 10

你可以做的是,在app/http/Kernel.php中添加以下代码块:

    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
Run Code Online (Sandbox Code Playgroud)

在$ middleware变量里面.所以它看起来像:

    protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    ];
Run Code Online (Sandbox Code Playgroud)

它对我有用,我希望它也适合你.

  • 进行此更改后,laravel 验证错误不会显示在视图页面上。 (2认同)

apo*_*fos 5

所以我知道这是一个老问题,但如果有人发现它有用,我是如何处理这个问题的:

在我的App/Exceptions/Handler.php我将默认render方法更改为:

public function render($request, Exception $exception) {        
    \Route::any(request()->path(), function () use ($exception, $request) {
        return parent::render($request, $exception);
    })->middleware('web');
    return app()->make(Kernel::class)->handle($request);
}
Run Code Online (Sandbox Code Playgroud)

这实现了 2 个要求:

  1. 所有web中间件都针对请求正确运行
  2. 有效的 API 路由不会启动会话

这实际上是在web出现错误时将中间件组设为默认运行的决定。Laravel 通常不会在错误页面上运行任何中间件组。如果需要,您当然可以指定其他中间件或其他路由参数,或者使用其他条件,例如,如果路径以 开头,api/则使用api中间件而不是使其更加一致。

希望这对某人有帮助。