Пользовательская ошибка на Handler.php запускается несколько раз - PullRequest
0 голосов
/ 05 октября 2018

Я разрабатываю пользовательскую ошибку 500.

Сначала мне нужно сохранить каждые 500 ошибок в базе данных (журнал ошибок), а затем перенаправить на страницу 500 ошибок с формой (пользователь будетбыть в состоянии сообщить ее имя и сообщение (опционально)).

Я заметил, что метод рендеринга будет запускаться несколько раз, когда возникает ошибка в представлении errors.500 .В приведенном ниже примере я даю недопустимое имя маршрута (только для теста), и он будет запускаться несколько раз (2) .Несколько данных будут сохранены в базе данных несколько раз, когда это произойдет (1) .

public function render($request, Exception $e)
{
    if (!env('APP_DEBUG')) { 
        $statusCode = $exception->getStatusCode($exception);    
        switch($statusCode){
            case 500:
                $user = Auth::user() ? Auth::user() : null;

                $data  = [
                    'name'          => Auth::user() ? Auth::user()->name : null,
                    'url_error'     => Request::fullUrl(),
                    'message_error' => $exception->getMessage()
                ];

                $logErro = LogError::create($data); //(1) The same data will be saved several times
                echo $exception->getMessage(). "<br />";

                if($logErro){ //Success
                    $data = array_merge($create, [ 
                        'user' => $user,
                        'logErro' => $logErro,
                        'routeUpdate' => route('logerrors.update', 35) //Giving an invalid route
                    ]);
                    if(!Request::ajax()){ 
                        return response()->view('errors.500', $data, 500);                            
                    }
                }
                return parent::render($request, $e);
                break;
        }
    }        
    return parent::render($request, $e);
}

(2) Эхо, приведенное выше, напечатает несколько раз

    Trying to get property of non-object (View: /system/resources/views/dashboard/index.blade.php)
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Route [logerrors.update] not defined.
    Uncaught InvalidArgumentException: Route [logerrors.update] not defined. in /system/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:305 Stack trace: #0 /system/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(788): Illuminate\Routing\UrlGenerator->route('logerrors...', 342, true) #1 /system/app/Exceptions/Handler.php(91): route('logerrors...', 342) #2 /system/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(112): App\Exceptions\Handler->render(Object(Illuminate\Http\Request), Object(InvalidArgumentException)) #3 /system/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(89): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse(Object(InvalidArgumentException)) #4 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(InvalidArgumentException)) #5 {main} thr

Страница ошибок My Custom 500 ( error.500 )

                <form id="form" autocomplete="off" action="{{ $routeUpdate }}" class="form" role="form" enctype="multipart/form-data" method="post">
                    {{ csrf_field() }}
                    {{ method_field('PUT') }}

                    <section class="page-1">
                        <div class="row">
                            <div class="col-md-6">

                                <!-- start name -->
                                <div class="form-group" id="div_name">
                                    <label for="i_name">Name</label>
                                    <input type="text" class="form-control" name="name" id="i_name" value=""  required>
                                </div>                
                                <!-- end name -->
                            </div>
                            <div class="col-md-6">

                                <!-- start error_message -->
                                <div class="form-group" id="div_error_message">
                                    <label for="txt_error_message">Error Message</label>
                                    <textarea class="form-control" name="error_message" id="txt_error_message"  required></textarea>
                                </div>
                                <!-- end error_message -->

                            </div>
                        </div>
                    </section>
                    <div class="row">
                        <div class="form-group col-md-12">
                            <button type="submit" class="btn btn-success btn-block" id="btn_salvar">
                                <span class="fa fa-check fa-1x"></span> Enviar
                            </button>
                        </div>
                    </div>
                    <br/><br/><br/>
                </form>    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...