php - Phalcon PHP - 将事件管理器附加到非微型应用程序中的路由器,无需滚动我自己的 EventsManager

标签 php router phalcon

我正在尝试将类似的内容添加到非微型应用程序中,但我不确定如何在不滚动我自己的 EventsManager 的情况下做到这一点。有没有办法获取 Phalcon 默认 EventsManager 的引用?

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

    if ($event->getType() == 'beforeException') {
        switch ($exception->getCode()) {
            case Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
            case Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
                $dispatcher->forward(array(
                    'controller' => 'errors',
                    'action' => 'show404'
                ));
                return false;
        }
    }
});

想法?

谢谢!

最佳答案

当然有。您的调度程序必须作为同名服务注入(inject)到您的 DI 中。如果您的 $eventsManagerPhalcon\DI\Injectable 的实例:

$this->dispatcher->forward(…); 
$this->di->get('dispatcher')->forward(…);

如果没有:

DI::getDefault()->get('dispatcher')->forward(…);

编辑:

是的,文档中并不清楚有一个共享事件管理器,我看到的所有示例仅显示了新创建的实例的用法。正在查看the code of the Di/FactoryDefault似乎有一个同名的服务。您可以使用与上面相同的语法来获取它。

DI::getDefault()->get('eventsManager')->attach('dispatch', …);

整个事情应该看起来像这样,并且必须在配置 DI 之后在某个地方进行设置。

$di->get('eventsManager')->attach("dispatch:beforeException", function($event, $dispatcher, $exception) {
    switch ($exception->getCode()) {
        case Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
        case Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
            $dispatcher->forward(array(
                'controller' => 'errors',
                'action' => 'show404'
            ));
            return false;
    }
});

$di->get('dispatcher')->setEventsManager($di->get('eventsManager'));

关于php - Phalcon PHP - 将事件管理器附加到非微型应用程序中的路由器,无需滚动我自己的 EventsManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631590/

相关文章:

javascript - 基于浏览器的客户端抓取

php - 在 DOMPDF 中自定义宽度和高度

javascript - ExpressJS 4 中间件问题

php - 如何按列而不是按字母顺序排列查询

php - SQLSTATE[42000] : Syntax error or access violation: 1066

php - Phalcon,Docker MySQL 连接失败

php - Magento - Paypal Express - 结账时发送了错误的邮政编码

php - 寻找一种处理/处理 PHP OOP 网站的方法

angular - 类型错误 : Cannot read property 'router' of null Angular2 Router

javascript - react native router flux 遇到两个 child 用同一个key