8

具体的には、Module.php ファイル内で FlashMessenger プラグイン フォームを使用しようとしています。

現在、Application/Module.phpファイル内のメソッドは次のようになっています。

public function checkAcl(MvcEvent $e) {
    // code to determine route and role ...

    if (!$e->getViewModel()->acl->isAllowed($userRole, $route)) {
        $flashMessenger = $e->getController()->plugin('flashMessenger');
        $flashMessenger->addMessage('You must be logged in');

        // code to redirect to login page ...
    }
}

しかし、$e->getController() がコントローラ オブジェクトではなく文字列を返すため、これは機能しません。コントローラーまたはプラグインに直接アクセスするためのヘルプをいただければ幸いです。

4

2 に答える 2

15

次のように、ControllerPluginManager を使用して、Module.php 内の任意のイベント ハンドラから flashMessenger のインスタンスを取得できます。

public function myEventHandler(MvcEvent $e) {
    $sm = $e->getApplication()->getServiceManager();
    $flash = $sm->get('ControllerPluginManager')->get('flashMessenger');
    $flash->addErrorMessage('test');
    // ...
}

明らかに、これはどのコントローラ プラグインでも実行できます。

于 2013-05-15T01:20:34.823 に答える