如何在Laravel 4中设置“普通”异常处理程序

时间:2014-05-01 23:02:31

标签: php laravel laravel-4

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']);
    });
}

我在哪里设置自己的自定义普通处理程序?我不喜欢"哎呀"消息,我希望能够显示特定于站点的消息

干杯

2 个答案:

答案 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.
});

请访问http://laravel.com/docs/errors了解详情