2014-10-10 2 views
3

Я развертываю свое приложение laravel на своем сервере облаков. Дело в том, что я не хочу, чтобы пользователи попадали на страницу с ошибкой (со стеком трассировки), вызванную приложением, как я могу остановить это, предоставляя настраиваемую страницу ошибок?Laravel 4 - страница настройки сайта для настройки

ответ

10

Прежде всего, отредактируйте свой основной файл конфигурации app.php в app/config/app.php и включите опцию debug в значение false.

/* 
|-------------------------------------------------------------------------- 
| Application Debug Mode 
|-------------------------------------------------------------------------- 
| 
| When your application is in debug mode, detailed error messages with 
| stack traces will be shown on every error that occurs within your 
| application. If disabled, a simple generic error page is shown. 
| 
*/ 

'debug' => false, 

Далее в файле app/start/global.php вы будете иметь обработчик ошибок приложения. Вы можете подключиться к этому, чтобы вернуть свое собственное представление об ошибке (вместо страницы «Упс, что-то пошло не так».). Убедитесь, что вы также вернули код ошибки 500, чтобы браузер (и поисковые системы) знал, что происходит.

/* 
|-------------------------------------------------------------------------- 
| Application Error Handler 
|-------------------------------------------------------------------------- 
| 
| Here you may handle any errors that occur in your application, including 
| logging them or displaying custom views for specific errors. You may 
| even register several error handlers to handle different types of 
| exceptions. If nothing is returned, the default error view is 
| shown, which includes a detailed stack trace during debug. 
| 
*/ 

App::error(function(Exception $exception, $code) 
{ 
    Log::error($exception); 

    return Response::view('pages.error', [], 500); 
}); 

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

App::missing(function(Exception $exception, $code) 
{ 
    return Response::view('pages.missing', [], 404); 
} 

Наконец, если вы используете привязки в любом месте вашего приложения findOrFail() или модель маршрута вам нужно обрабатывать Illuminate\Database\Eloquent\ModelNotFoundException, который не будет вызывать missing() обработчика.

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception, $code) 
{ 
    return Response::view('pages.missing', [], 404); 
} 
2

Вы можете создать обработчик пользовательских ошибок в вашем routes.php, как:

// 404 error 
App::missing(function($exception) { 
    return Response::view('errors.show', array('code' => 'http_error_404'), 404); 
}); 

// Exception: ModelNotFoundException 
App::error(function(ModelNotFoundException $exception) { 
    return Response::view('errors.show', array('code' => 'model_not_found'), 404); 
}); 

// Exception: MethodNotAllowedHttpException 
App::error(function(MethodNotAllowedHttpException $exception) { 
    Log::warning('MethodNotAllowedHttpException', array('context' => $exception->getMessage())); 
    return Response::view('errors.show', array('code' => 'http_error_404'), 404); 
}); 

// Exception: QueryException 
App::error(function(QueryException $exception) 
{ 
    return Response::view('errors.show', array('code' => 'query_error')); 
} 
0

Это обсуждается очень тщательно в documentation. Прежде всего, в файле конфигурации для производственных сайтов должно быть установлено значение debug.

Затем вам нужно поймать различные коды ошибок и ответить своими собственными взглядами.

Например, чтобы поймать 404, используйте:

App::missing(function($exception) 
{ 
    return Response::view('errors.missing', array(), 404); 
}); 

Или поймать какие-либо фатальные ошибки:

App::fatal(function($exception) 
{ 
    // 
}); 
0

Я получаю эту ошибку 500 на свежем Laravel 5.1 сайта и я нашел, что моя версия php была установлена ​​на старом 5.4, и я установил его на php7 и исправил свою проблему, я не изменил никаких других настроек, поэтому моя проблема была php, надеюсь, что это поможет