我正在为Laravl应用程序中的所有错误创建一个多合一页面。错误页面应包括当前登录用户的布局:普通用户,管理员和来宾。为了能够使用Auth::check()
,我使用后备路由创建了错误页面。
Route::fallback(function () {
return view('errors.general', ['msg'=>'Error Description']);
});
和视图:
@php
if (Auth::guard('admin')->check())
$layout = "layouts.admin";
elseif (Auth::check())
$layout = "layouts.app";
else
$layout = "layouts.start";
@endphp
@extends($layout)
@section('content')
<div class="error-container">
<div class="error-box">
<div class="error-text">
{{ $msg }}
</div>
</div>
</div>
@endsection
该结构正在处理404错误。但是对于500个错误,Laravel显示了默认的500页。如何指示所有错误以使用附加错误消息使用同一视图。
后备路由仅捕获不存在的路由(即404):https://laravel.com/docs/6.x/routing#fallback-routes
但是您可以定义自己的错误页面。https://laravel.com/docs/6.x/errors#custom-http-error-pages
Laravel可轻松显示各种HTTP状态代码的自定义错误页面。例如,如果您希望为404 HTTP状态代码定制错误页面,请创建
resources/views/errors/404.blade.php
。
为了使用单个错误布局,您可以执行以下操作:
资源/视图/错误/ 500.blade.php
@include('layouts.error',['msg' => $exception->getMessage()])
编辑:但是,我不认为错误页面会加载会话中间件,因此您可能会很费劲地尝试使用Auth Facade。
不是创建后备路由,而是处理错误处理程序中的所有异常:app/Exceptions/Handler.php
而且您还可以使用下面的代码检查哪个用户已在处理程序中登录,这只是一个基本示例,您可以使用它处理500个错误,如下面的代码:
public function render($request, Exception $exception) {
if ($exception instanceof \ErrorException) {
if (Auth::guard('admin')->check()){
// Your custom view for admin
}else{
//Your custom view for another user
}
}
return parent::render($request, $exception);
}