Laravel 5.8在一个视图中处理所有错误

问题描述 投票:0回答:1

我正在为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页。如何指示所有错误以使用附加错误消息使用同一视图。

laravel error-handling
1个回答
0
投票

后备路由仅捕获不存在的路由(即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。


0
投票

不是创建后备路由,而是处理错误处理程序中的所有异常: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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.