具體來說,我試圖在我的Module.php文件中使用FlashMessenger插件。在Zend Framework 2中,如何在控制器外部使用控制器插件
現在我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()返回一個字符串,而不是一個控制器對象。任何幫助直接訪問控制器或插件的讚賞。
注意這一點 - 當您調用hasMessages()或getMessages()時,FlashMessenger會將會話中的所有消息提取到本地FlashMessenger對象(請參閱FlashMessenger.php中的「getMessagesFromContainer」函數)。 如果您實例化一個新的FlashMessenger,並且與此同時,您的應用程序中的某些內容在Service Manager中的實例上調用了hasMessages或getMessages,那麼您新創建的實例將爲空。如果你碰巧是第一個使用上面的代碼,那麼任何未來的實例都將是空的(第一個實例獲取消息)。 –
感謝提示@Mark T – Conti