在Laravel 4.1
中,当抛出和调试中的异常设置为false
时,会显示一个普通的异常。
信息如下:
哎呀,出了点问题
我已经浏览了代码,似乎普通的异常处理程序已在以下位置注册:
Illuminate\Exception\ExceptionServiceProvider.php
通过以下行
protected function registerHandler()
{
$this->app['exception'] = $this->app->share(function($app)
{
return new Handler($app, $app['exception.plain'], $app['exception.debug']);
});
}
我在哪里设置自己的自定义普通处理程序?我不喜欢"哎呀"消息,我希望能够显示特定于站点的消息
干杯
答案 0 :(得分:4)
这是普通的异常处理程序;默认情况下已在app/start/global.php
中可用,按以下方式修改它(顺便说一下,Whoops! PHP Errors only for Cool Kids):
App::error(function(Exception $exception)
{
Log::error($exception);Log::error($exception->getMessage());
return View::make('errors.index')->with('exception', $exception);
});
创建视图view/errors/index.blade.php
@extends('layouts.master')
@section('content')
<div class="page-header">
<h1>Oops!</h1>
</div>
<div class='well'>ERROR: {{ $exception->getMessage() }}</div>
@stop
还在'debug' => false
文件中生成app/config/app.php
:
/*
|--------------------------------------------------------------------------
| 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,
您可以在$exception
对象中使用以下方法:
array (size=10)
//0 => string '__construct' (length=11)
1 => string 'getSeverity' (length=11)
2 => string 'getMessage' (length=10)
3 => string 'getCode' (length=7)
4 => string 'getFile' (length=7)
5 => string 'getLine' (length=7)
6 => string 'getTrace' (length=8)
7 => string 'getPrevious' (length=11)
8 => string 'getTraceAsString' (length=16)
//9 => string '__toString' (length=10)
如果你离开'debug' => true,
,那么你的异常处理程序仍然可以工作,但在某些情况下,当你的处理程序没有捕获到异常时它会显示whoops
但是在你的通用{{1}之前的另一个特定处理程序中处理程序。
还要记住,Exception
类是最通用的异常类型,如果之后定义了其他更具体的异常处理程序,那么如果从该特定处理程序返回任何响应,它将不会被触发。
答案 1 :(得分:1)
在app / start / global.php文件中添加
App::missing(function($exception)
{
return 'Your custom message'; // you can also specify a view to render.
});