2017-02-24 90 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