5

モジュール内のすべてのアクションの前に実行するコードを書きたいと思います。フックしようとしましonBootstrap()たが、コードは他のモジュールでも実行されます。

私への提案はありますか?

4

1 に答える 1

7

これには 2 つの方法があります。

1 つの方法は、サービスを作成し、すべてのコントローラ ディスパッチ メソッドで呼び出すことです。

Use onDispatch method in controller. 


    class IndexController extends AbstractActionController {


        /**
         * 
         * @param \Zend\Mvc\MvcEvent $e
         * @return type
         */
        public function onDispatch(MvcEvent $e) {

            //Call your service here

            return parent::onDispatch($e);
        }

        public function indexAction() {
            return new ViewModel();
        }

    }

コードの上に次のライブラリを含めることを忘れないでください

use Zend\Mvc\MvcEvent;

2番目の方法は、ディスパッチ時にイベントを使用してModule.php経由でこれを行うことです

namespace Application;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module {

    public function onBootstrap(MvcEvent $e) {        
        $sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', array($this, 'addViewVariables'), 201);
    }

    public function addViewVariables(Event $e) {
        //your code goes here
    }

    // rest of the Module methods goes here...
    //...
    //...
}

ZF2 を使用して簡単なサービスを作成する方法

参照2

参照3

于 2012-11-13T12:22:21.067 に答える