Laravel 5.8 обрабатывает все ошибки в одном представлении - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю многофункциональную страницу для всех ошибок в приложении 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 страниц по умолчанию. Как указать всем ошибкам использовать одно и то же представление с дополнительными сообщениями об ошибках.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Вместо создания запасного маршрута обработайте все исключения внутри обработчика ошибок: app/Exceptions/Handler.php

И вы также можете проверить, какой пользователь вошел в обработчик с помощью приведенного ниже кода, это просто базовый пример, с которым выможет обработать 500 ошибок, как показано ниже:

public function render($request, Exception $exception)
    {
        // 404 page when a model is not found
        if ($exception instanceof ModelNotFoundException) {
            if (Auth::guard('admin')->check()) {
                // Your custom view for admin
            } else {
                //Your custom view for another user
            }

        }
        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);
    }
0 голосов
/ 30 сентября 2019

Резервный маршрут только перехватывает несуществующие маршруты (т. Е. 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.

Чтобы использовать макет с одной ошибкой, вы можете сделать что-то вроде этого:

resources / views / errors / 500.blade.php

@include('layouts.error',['msg' => $exception->getMessage()])

EDIT: Однако я не верю, что страницы ошибок загружают сеанспромежуточного программного обеспечения, поэтому у вас, вероятно, возникнут проблемы при попытке использовать фасад Auth без дополнительных усилий.

...