【问题标题】:How to set custom exception handler in Laravel 5?如何在 Laravel 5 中设置自定义异常处理程序?
【发布时间】:2016-08-03 22:59:21
【问题描述】:

您好,我是 laravel 新手,正在使用自定义异常处理。

我已经捕获了我所知道的所有异常并且它工作正常。据我了解,set_exception_handler 用于处理未捕获的异常。现在我有两个问题:

1)我必须知道我对set_exception_handler的理解是否正确。

2) 如何在 laravel 5 中实现处理未捕获的异常

这就是我在控制器中实现set_exception_handler 的方式

class SearchController extends BaseController{

    public function getTitleMessage($exc){
        var_dump("set exception handler".$exc);
        return json_encode("Error");
    }

    public function genericSearch(){
       //Bussiness logic goes here

        set_exception_handler('getTitleMessage');
        throw new Exception("Search Failed");
    }

这显示set_exception_handler 不是有效回调的错误。所以我将代码更改为

set_exception_handler(array($this,'getTitleMessage'));

但也不适合我。有人指导我如何在 laravel 控制器中实现它。提前致谢

【问题讨论】:

    标签: php laravel exception-handling laravel-5


    【解决方案1】:

    您必须在 app\Exceptions\Handler.php 渲染方法中实现自定义异常处理程序逻辑:

        public function render($request, Exception $exception) {
           if (method_exists($e, 'render') && $response = $e->render($request)){ 
                 return Router::prepareResponse($request, $response);
            } elseif ($e instanceof Responsable) {
                 return $e->toResponse($request);
            }
            $e = $this->prepareException($e);
           /* Your custom logic */
            if ($e instanceof HttpResponseException) {
                return $e->getResponse();
            } elseif ($e instanceof AuthenticationException) {
                return $this->unauthenticated($request, $e);
            } elseif ($e instanceof ValidationException) {
                return $this->convertValidationExceptionToResponse($e, $request);
            }
           return parent::render($request, $exception);
       }
    

    【讨论】:

      【解决方案2】:

      Laravel 已经使用了全局异常处理程序

      看看vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php文件;正如你在bootstrap 方法中看到的,Laravel 已经使用set_exception_handlerhandleException 方法设置为全局异常处理程序

      当引发未捕获的异常时,该方法最终将调用App\Exceptions\Handler::render

      因此,如果您想以某种方式处理未手动捕获的异常,您只需将代码添加到 render 方法:

      app\Exceptions\Handler.php

      public function render($request, Exception $e)
      {
          //DO WATHEVER YOU WANT WITH $e
      
          return parent::render($request, $e);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-18
        • 1970-01-01
        • 2014-05-06
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多