2016-12-11 7 views
1

В Laravel, всякий раз, когда есть ошибка, даже незначительные замечания, предупреждения и DEPRECATED erros, я получил полную информацию об отладке, которая убивает приложение. В моем App.config я включил debug => false, и я получил сообщение «Упс, похоже, что что-то пошло не так».Laravel Отключить обработчик исключений

Как я могу отключить всю обработку ошибок, но Laravel просто получить нормальные ошибки PHP, которые не прерывают весь поток приложений?

ответ

2

Файл App\Exceptions\Handler.php построен именно для этого.

В методе public function render(), вы можете поймать приложения и выполнять определенные взгляды переадресовывает/страницы, если вы так выбираете:

Например, вы можете захватить HttpException «S в вашем приложении, а затем вернуться на страницу с ошибкой, если вы хотели :

public function render($request, Exception $e) 
{ 
    //other stuff 

    if ($e instanceof HttpException) { 
     return view('errors.general')->withErrors([ 
      'message' => 'The application encountered an error!' 
     ]); 
    } 

    return parent::render($request, $exception); 
} 
+1

Чтение вопроса, а затем ваш ник заставил меня хихикать, потому что это было именно то, что я думал после прочтения его :) в любом случае, +1 от меня для правильного ответа. –

1

Если вы не хотите прерывать рабочий процесс для определенных типов PHP ошибок, вам нужно будет отключить обработчик ошибок зарегистрированного Laravel для этих ошибок.

Laravel регистрирует обработку ошибок в Illuminate/Foundation/Bootstrap/HandleExceptions.php. Этот загрузчик является одним из нескольких, который вызывается, когда ваше ядро ​​Http обрабатывает запрос.

Хотя есть несколько способов сделать то, что вы хотите сделать, я считаю, что проще всего обработать событие, которое запускается после вызова этого загрузчика. В обработчике событий вы можете сбросить обработчик ошибок для ошибок, которые вы не хотите обрабатывать Laravel.

В файле bootstrap/app.php, добавьте следующую строку перед $app возвращается:

$app->afterBootstrapping(
    'Illuminate\Foundation\Bootstrap\HandleExceptions', 
    function ($app) { 
     set_error_handler(function ($level, $message, $file = '', $line = 0, $context = []) { 
      // Check if this error level is handled by error reporting 
      if (error_reporting() & $level) { 
       // Return false for any error levels that should 
       // be handled by the built in PHP error handler. 
       if ($level & (E_WARNING | E_NOTICE | E_DEPRECATED)) { 
        return false; 
       } 

       // Throw an exception to be handled by Laravel for all other errors. 
       throw new ErrorException($message, 0, $level, $file, $line); 
      } 
     }); 
    } 
); 
1

Что до проголосовали ответ противоположное тому, что он просил. Насколько я могу судить, не существует способа отделить отчет об ошибках и laravel, захватывая визуализацию экрана. Я просматривал код Laravel 5 и не нашел способ разделить их, используя их настройки.

Вы можете написать свою собственную библиотеку, чтобы полностью взять на себя всю обработку ошибок и удалить все внутренние слежения laravels, но тогда вам нужно будет обязательно передать ее в laravel в тех случаях, когда вам нужна ошибка страницы оригинала обработки. Самый простой способ - найти поставщика обработчика ошибок третьей части, а затем изменить его, чтобы захватить все обработчики ошибок, а не блокировать рендеринг.

Смежные вопросы