Я развертываю свое приложение laravel на своем сервере облаков. Дело в том, что я не хочу, чтобы пользователи попадали на страницу с ошибкой (со стеком трассировки), вызванную приложением, как я могу остановить это, предоставляя настраиваемую страницу ошибок?Laravel 4 - страница настройки сайта для настройки
ответ
Прежде всего, отредактируйте свой основной файл конфигурации 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);
}
Вы можете создать обработчик пользовательских ошибок в вашем 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'));
}
Это обсуждается очень тщательно в documentation. Прежде всего, в файле конфигурации для производственных сайтов должно быть установлено значение debug
.
Затем вам нужно поймать различные коды ошибок и ответить своими собственными взглядами.
Например, чтобы поймать 404, используйте:
App::missing(function($exception)
{
return Response::view('errors.missing', array(), 404);
});
Или поймать какие-либо фатальные ошибки:
App::fatal(function($exception)
{
//
});
Я получаю эту ошибку 500 на свежем Laravel 5.1 сайта и я нашел, что моя версия php была установлена на старом 5.4, и я установил его на php7 и исправил свою проблему, я не изменил никаких других настроек, поэтому моя проблема была php, надеюсь, что это поможет