我想要实现的是从我的模型中的db中提取一些数据并将其发送到布局,我的主菜单位于何处。我希望在从模型中获得该参数的值之后更改该菜单。 这是课程模块内容:
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
// $serviceManager = $e->getApplication()->getServiceManager();
$viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
//$x = new UserController();
// $var = $x->getUserSession();
// $viewModel->someVar = $var;
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getServiceConfig() {
return array(
'factories' => array(
'Application\Model\UsersTable' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new Model\UsersTable($dbAdapter);
return $table;
},
),
);
}
}
有人说,我可以使用Helper,其他人说我必须修改onBootstrap功能。这真是搞砸了我的全部头脑。你能举个例子说明我该如何运作? thx
答案 0 :(得分:1)
您可以执行以下操作:
public function onBootstrap(MvcEvent $e)
{
$sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
$controller = $e->getTarget();
$data = $controller->getServiceLocator()->get('Application\Model\UsersTable')->functionToGetData();
$controller->layout()->data= $data;
}, 100);
}
然后$ data参数可用于您的布局。只是为了清楚当你说布局我假设你的意思是默认布局
更新:我发现很难表达我的理解方式,所以为了避免混淆,我会引用文档和其他来源的一些理论来帮助我理解上述内容。你应该阅读我在最后提供的参考资料,你会明白的。
在每个页面请求上为每个实现此功能的模块调用onBootstrap()方法,并且只应该用于执行轻量级任务,例如注册事件侦听器。
如果EventManager触发某些事件,它真的很有趣。
基本触发有三个参数: - 事件名称,通常是当前的函数/方法名称; - 目标,通常是当前对象实例; - 参数,通常是提供给当前函数/方法的参数
反过来,触发事件只有在某事正在侦听事件时才会引起注意。
监听器附加到EventManager,指定命名事件和要通知的回调。回调接收一个Event对象,该对象具有用于检索事件名称,目标和参数的访问器。让我们添加一个监听器,并触发事件。
共享事件管理器是一种管理,它在整个应用程序中是唯一的,并且被注入每个事件管理器
因此换句话说,onBootstrap方法将使用sharedEvents附加事件,然后触发它们。为了更好地理解这些概念,请查看以下参考文献。