2017-02-24 65 views

回答

1

可以在应用程序\例外听任何异常\处理器@渲染

if ($e instanceof NotFoundHttpException) { 
    if (\Auth::guest()) { 
     return redirect()->to('/login'); 
    } 

    return response()->view('errors.404', [], 404); 
} 

不要忘记在use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;你的文件的顶部。

编辑

您必须启用会议的所有路由,所以你可以有找不到路由的用户数据。在您的应用程序/ HTTP/Kernel.php添加下列项目的$middleware阵列:

protected $middleware = [ 
    .... 

    \Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
]; 
+0

问题是,即使您已经登录,\ Auth :: guest()也会返回true。 – vivanov

+0

使用'\ Auth :: check()'而不是使用'\ Auth :: guest()'。这可能有帮助。 – Manish

+0

@vivanov所以问题在于没有找到路由时启用会话,所以你没有那里的用户数据。查看我上面的编辑,了解如何启用所有路由的会话。 – TheFallen

1

使用此在您的例外/ Handler.php

public function render($request, Exception $e) 
    { 
     if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException){ 

      return response(redirect(url('/')), 404); 
     } 
     return parent::render($request, $e); 

    } 
+0

我upvoted你的答案,因为它几乎是正确的,但是重定向状态代码不应该是404,但可能是一个30倍 –

+0

感谢您的回答。它几乎在那里,但实际上当您登录时,它会重定向到主页,而不是找到找不到的页面。感谢你的努力! – vivanov