Я разрабатываю пользовательскую ошибку 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>