2016-06-21 54 views
3

我正在使用spatie權限模塊來控制我的站點中的角色和權限。我已經添加了一點到Authenticate中間件。我的把手現在看起來是這樣的:Laravel返回HttpException對象而不是顯示自定義錯誤頁面

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->guest()) 
    { 
     if ($request->ajax() || $request->wantsJson()) 
      return response('Unauthorized.', 401); 

     return redirect()->guest('login'); 
    } 

    if (! Auth::user()->can('access acp')) 
    { 
     if ($request->ajax() || $request->wantsJson()) 
      return response('Unauthorised.', 403); 

     abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you."); 
    } 

    return $next($request); 
} 

因此,如果用戶沒有登錄我們送他們到登錄頁面,否則我們檢查,如果有權限訪問ACP,如果不向他們展示403錯誤。我已將403.blade.php添加到views/errors文件夾。但是,當我運行該代碼時,我只是得到一個哎呀!並且開發者工具顯示正在返回一個500 ISE。我不明白爲什麼我沒有看到我的自定義錯誤頁面。

到目前爲止,我已嘗試將環境切換到生產並關閉調試模式,但不顯示頁面。我也嘗試拋出一個授權異常,但這並沒有什麼不同。我也試過使用App::abort(),但是我仍然拿到了500 ISE。

我試過谷歌搜索的問題,但我找不到任何人有這個問題。我真的很感激任何幫助,讓這個工作。

哎呦返回

Error output

如果我修改代碼正是如此

try 
{ 
    abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you."); 
} catch (HttpException $e) 
{ 
    dd($e); 
} 

然後我得到的HttpException實例與我的錯誤代碼和消息,爲什麼不說則顯示一個自定義錯誤頁面?

+0

什麼異常消息是你看到你做500? – Max

+0

它向我顯示了我傳遞給中止的消息,'您無權訪問管理控制面板。如果您認爲這是一個錯誤,請聯繫爲您設置帳戶的管理員.' – Styphon

+0

您是否檢查過您的PHP錯誤日誌? 500表示我們正在談論更高級別的錯誤。 – Dencker

回答

2

我已經設法解決這個問題,下面的代碼(注意,這是一個應用程序流明,但它應該與Laravel工作)

routes.php文件

$app->get('/test', function() use ($app) { 
    abort(403, 'some string from abort'); 
}); 

資源/視圖/錯誤/ 403.blade.php

<html> 
    <body> 
    {{$msg}} 
    <br> 
    {{$code}} 
    </body> 
</html> 

應用程序/例外/ Handler.php,修改渲染()函數如下

public function render($request, Exception $e) 
{ 
    if ($e instanceof HttpException) { 
     $statusCode = $e->getStatusCode(); 

     if (view()->exists('errors.'.$statusCode)) { 
      return response(view('errors.'.$statusCode, [ 
       'msg' => $e->getMessage(), 
       'code' => $statusCode 
      ]), $statusCode); 
     } 
    } 

    return parent::render($request, $e); 
} 

它做什麼的Laravel應根據文檔

+0

謝謝!那樣做了。屁股這真是太痛苦了。我猜想我把我原來在那裏的東西重寫了一遍。 – Styphon

相關問題