【问题标题】:Binding Phalcon event manager to dispatcher causes error将 Phalcon 事件管理器绑定到调度程序会导致错误
【发布时间】:2015-02-02 16:36:14
【问题描述】:

我是 Phalcon 的新手,我正在尝试将侦听器绑定到调度程序服务。

这是监听器:

<?php

namespace Core\Listener;

use Phalcon\DI;
use Phalcon\Dispatcher;
use Phalcon\Events\Event;
use Phalcon\Mvc\User\Plugin;

class DispatchListener extends Plugin
{

    protected $_logger;

    public function __construct()
    {
        $this->_logger = new \Phalcon\Logger\Adapter\File( 'logs/app.log' );
    }

    public function beforeDispatch ( Event $event ,  Dispatcher $dispatcher )
    {

       $this->_logger->info( 'dispatching' );

    }

    public function afterDispatch ( Event $event ,  Dispatcher $dispatcher )
    {

        $this->_logger->info( 'dispatched....' );

    }

}

还没有发生太多事情,只是在尝试设置。在我的引导 index.php 中,我有:

$di = new \Phalcon\DI\FactoryDefault();

$di->set('dispatcher', function() use ($di) {

    //Obtain the standard eventsManager from the DI
    $eventsManager = $di->getShared('eventsManager');

    //Instantiate the Security plugin
    $listener = new \Core\Listener\DispatchListener($di);

    //Listen for events produced in the dispatcher using the Security plugin
    $eventsManager->attach('dispatch', $listener);

    $dispatcher = $di->getShared( 'dispatcher' );
    //Bind the EventsManager to the Dispatcher
    $dispatcher->setEventsManager($eventsManager);

    return $dispatcher;
});

现在,当我打开网站时,监听器没有任何反应。没有记录,什么都没有。我一定在这里忽略了一些明显的东西,但我看不到什么。

【问题讨论】:

    标签: phalcon


    【解决方案1】:

    以焕然一新的心态查看您的代码可以做什么!我不仅在最初的问题中忘记提到我正在从事模块化项目。我也忘记了我的模块是我设置调度程序的地方!因此将上述代码移动到我的 Module.php 解决了这个问题。所以,我的 Module.php 现在看起来像:

    <?php
    
    namespace MyModule;
    
    use Phalcon\Loader,
        Phalcon\Mvc\Dispatcher,
        Phalcon\Mvc\View,
        Phalcon\Mvc\ModuleDefinitionInterface;
    
    class Module implements ModuleDefinitionInterface
    {
    
        public function registerServices($di)
        {
    
            //Registering a dispatcher
            $di->set('dispatcher', function() use( $di ) {
    
                $dispatcher = new Dispatcher();
                $dispatcher->setDefaultNamespace('MyModule\Controller');
    
                /* add a listener */
                $eventsManager = $di->getShared('eventsManager');
                $listener = new \SomeModule\Listener\DispatchListener($di);
                $eventsManager->attach('dispatch', $listener);
                $dispatcher->setEventsManager($eventsManager);
    
                return $dispatcher;
            });
        }
    }
    

    就是这样,我的听众现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 2015-02-14
      • 2013-04-26
      • 2016-08-12
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多