在SilverStripe 4中调用默认的exceptionHandler等效项

时间:2018-01-15 04:53:58

标签: silverstripe-4

我已经搜索了SilverStripe 4的文档和API,但是我在使用相应的类调用默认的异常处理程序时遇到了麻烦。

在我的Page.php控制器的init()

中SilverStripe 4之前的工作原理
    parent::init();

    set_exception_handler(function($exception) {
        if( get_class($exception) == 'CustomException' ) {
            Controller::curr()->handleCustomException($exception);
        }
        return exceptionHandler($exception);
    });

我期望它如何与SilverStripe 4一起使用

    parent::init();

    set_exception_handler(function($exception) {
        if( get_class($exception) == 'CustomException' ) {
            Controller::curr()->handleCustomException($exception);
        }
        return <SomeMonologClass>::handleException($exception);
    });

我现在知道SilverStripe 4正在使用Monolog而且我遇到handleException函数,我认为这是我需要调用的函数,而不是exceptionHandler($exception)

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

use SilverStripe\Control\Controller;

class MyController extends Controller
{
    private static $dependencies = [
        'logger' => '%$Psr\Log\LoggerInterface',
    ];

    // This will be set automatically, as long as MyController is instantiated via Injector
    public $logger;

    protected function init()
    {
        $this->logger->debug("MyController::init() called");
        parent::init();
    }
}

如下所述:

https://docs.silverstripe.org/en/4/developer_guides/debugging/error_handling/#accessing-the-logger-via-dependency-injection

此处有更多信息:https://www.silverstripe.org/learn/lessons/v4/advanced-environment-configuration-1