Zend framework2 在ZF2中加载控制器之前,如何调用模块函数?
我想在控制器加载之前调用模块的函数。我该怎么办?有什么想法/链接吗?我想学习如何添加钩子点来控制流,但没有太多的想法。 基本上,我希望我的聊天模块出现在网站的所有页面上。现在,我必须从每个页面打电话来加载它。 有各种各样的MVC事件,如引导、渲染等。这些事件中的任何一个能起到拯救作用吗 如果你需要任何特定的代码,一定要告诉我 您有两个选择:Zend framework2 在ZF2中加载控制器之前,如何调用模块函数?,zend-framework2,event-listener,Zend Framework2,Event Listener,我想在控制器加载之前调用模块的函数。我该怎么办?有什么想法/链接吗?我想学习如何添加钩子点来控制流,但没有太多的想法。 基本上,我希望我的聊天模块出现在网站的所有页面上。现在,我必须从每个页面打电话来加载它。 有各种各样的MVC事件,如引导、渲染等。这些事件中的任何一个能起到拯救作用吗 如果你需要任何特定的代码,一定要告诉我 您有两个选择: init()和onBootstrap(),我倾向于使用onBootstrap() 您可以查看这些有用的资源 在Module.php中的onBootst
init()
和onBootstrap()
,我倾向于使用onBootstrap()
您可以查看这些有用的资源
在
Module.php
中的onBootstrap()
:示例中,您可以附加一个函数,在呈现任何操作时应调用该函数-
use Zend\Mvc\MvcEvent;
use SOME_SERVICE_CLASS_NAME; //updated line
class Module {
public function onBootstrap(MvcEvent $e) {
$e->getApplication()
->getEventManager()
->getSharedManager()
->attach('*', 'dispatch', array($this, 'FUNCTION_NAME'));
}
public function FUNCTION_NAME(MvcEvent $e) {
//your code for this function
$sm = $e->getApplication()->getServiceManager();
//Eg:
$service = new SOME_SERVICE_CLASS_NAME(); //updated lines
$service->setServiceLocator($sm);
$service->methodName();
}
[rest of the code]
}
“*”
-表示该函数已连接到所有模块的控制器分派
-表示分派时要调用的函数(渲染前)FUNCTION\u NAME
函数getEventManager
和getSharedManager
以及将函数附加到事件onBootstrap
以进行探索
编辑:
1. <代码>使用Zend\Mvc\MvcEvent代码>添加在顶部
$sm
已设置为该服务这样,当您从服务类中调用
getServiceLocator()
时,它将获取服务定位器。如果我的函数在另一个文件中?我制作了一个具有此功能的模块服务文件。在function\u NAME
代码中,创建该服务的对象并调用该方法。请确保在类模块{..
行上方包含use..
语句。如果服务需要一些依赖项,请也提供它们。答案中包含示例。请检查。我这样做了,它也可以工作。但是当我尝试调用此“$sm=$this->getServiceLocator();$this->albumTable=$sm->get('Album\Model\albumTable');
I get'调用成员函数get()在非对象上。您知道可能的原因吗?^这在调用的函数中。更新了答案。在Module.php
本身中获取服务定位器,并通过setServiceLocator()
将其传递给服务类文件。