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 回答
0

或者,因此 Ezequiel 解决方案对我来说很好,您可以使用以下内容:

确保使用 Module.php 中的类

use Zend\Mvc\Controller\Plugin\FlashMessenger;

接着:

$flash=new FlashMessenger();
$flash->addErrorMessage("hello");

我目前正在使用 Ezequiel 的。

于 2013-12-18T16:06:18.743 回答