【问题标题】:Laravel 8 - Using custom exceptionsLaravel 8 - 使用自定义异常
【发布时间】:2021-02-18 05:51:03
【问题描述】:

我对 Laravel 8 中的错误报告有疑问。

根据文档,应该可以在自定义异常中实现自定义 report() 或 render() 方法。

我创建了一个自定义异常如下:

class AdminException extends Exception
{
    protected $userId;

    public function __construct($message='', $userId=0) {
        parent::__construct($message);
        $this->setUserId($userId);
    }

    public function getUserId() {
        return $this->userId;
    }

    private function setUserId($userId) {
        return $this->userId = $userId;
    }

    public function report(){
        dd('in custom admin exception report');
    }

    public function render($request){
        dd('in custom admin exception render');
    }
}

问题是,当我故意从控制器抛出此错误时,我没有在异常中遇到任何这些方法。

为了尝试弥补这个问题,我在 Handler.php 文件中添加了如下方法:

$this->reportable( function(AdminException $e){
    dd('in reportable method from handler');
});

$this->renderable( function(AdminException $e, $request){
    dd('in renderable method from handler');
});

但是这些方法都没有被击中。有没有人在 Laravel 8 中有自定义异常的经验?文档非常不清楚,这是如何工作的?我应该只使用 Handler.php 文件的 report() 和 render() 方法吗?

谢谢!

【问题讨论】:

标签: php laravel


【解决方案1】:

我正在回答这个问题,以防其他人偶然发现这个问题。

在与 Taylor Otwell 本人来回推特之后,我得到了一些关于这个主题的澄清。

在 Laravel 中使用 Hander.php 文件时,您可以使用 report() 方法,但在执行其他任何操作之前调用 parent::report($e) 很重要。如果不这样做,报告逻辑将不会受到影响。

但是,首选行为是不使用 Handler.php 中的 report() 方法,而是在 Handler.php 的 register() 方法中注册报告或呈现回调。

澄清一下,可以在 Handler.php 中实现 report() 方法作为后备,但 parent::report($e);方法必须在 report() 方法中调用。

【讨论】:

  • 对不起,我不太明白,但我遇到了和你一样的问题。文档说:“您可以直接在自定义异常上定义报告和呈现方法。当这些方法存在时,框架将自动调用它们:”。这是行不通的吗?我必须在 Handler.php 的 register() 方法中定义我的所有报告吗?我在自定义异常的 report() 方法中包含了 parent::report($e),但该方法甚至没有被命中。你还有信息吗?
猜你喜欢
  • 2019-02-25
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2016-09-23
相关资源
最近更新 更多