Php Phalcon:在发送前引发异常时,如何在beforeException期间转发?

Php Phalcon:在发送前引发异常时,如何在beforeException期间转发?,php,phalcon,Php,Phalcon,我试图挽救在调度任何内容之前发生的异常,并将该错误转发给错误控制器,该控制器将显示一个漂亮的错误页面。问题是forward()什么也不做。在这种情况下,不会调用错误控制器 以下代码是附加到dispatcher实例的事件示例: $eventsManager->attach('dispatch:beforeDispatchLoop', function($event, $dispatcher) { throw new Exception('Just because.')

我试图挽救在调度任何内容之前发生的异常,并将该错误转发给错误控制器,该控制器将显示一个漂亮的错误页面。问题是
forward()
什么也不做。在这种情况下,不会调用错误控制器

以下代码是附加到dispatcher实例的事件示例:

    $eventsManager->attach('dispatch:beforeDispatchLoop', function($event, $dispatcher) {
        throw new Exception('Just because.');
    });

    $eventsManager->attach("dispatch:beforeException", function($event, $dispatcher, $exception) {

        $dispatcher->forward([
            'module' => 'frontend',
            'controller' => 'errors',
            'action' => 'show',
            'params' => [ 400 ]
        ]);

        …
    });
注意:我在调度循环之前抛出异常,因为这是我在转发时遇到问题的地方。当调度器已调用控制器的操作时,转发工作正常

以下是异常的堆栈策略:

exception 'Exception' with message 'Just because.' in /vagrant/application/config/services-web.php:27
Stack trace:
#0 [internal function]: {closure}(Object(Phalcon\Events\Event), Object(Phalcon\Mvc\Dispatcher), NULL)
#1 [internal function]: Phalcon\Events\Manager->fireQueue(Array, Object(Phalcon\Events\Event))
#2 [internal function]: Phalcon\Events\Manager->fire('dispatch:before...', Object(Phalcon\Mvc\Dispatcher))
#3 [internal function]: Phalcon\Dispatcher->dispatch()
#4 /vagrant/public/index.php(24): Phalcon\Mvc\Application->handle()
#5 {main}
你知道我如何解决这个问题,或者有没有更好的方法来解决这个问题?异常是由一个服务引发的。

我认为问题在于调度器还没有初始化。尝试更改为在分派之前:

$eventsManager->attach('dispatch:beforeDispatch', function($event, $dispatcher) {
    throw new Exception('Just because.');
});
此外,文档中的本节可能适用于:

只有调度程序生成的异常和中生成的异常 在“beforeException”事件中通知已执行的操作。 侦听器或控制器事件中产生的异常将被重定向 最新的尝试/捕获


谢谢你的回答,David,但是我在调度循环之前抛出异常,因为这就是我在转发时遇到的问题。当调度器已调用控制器的操作时,转发工作正常。此外,文档中的这条语句可能不准确,因为在我的示例中完美地调用了
dispatch:beforeeexception