在我的Zend应用程序中,有一个在多个模块中使用的布局文件。现在我需要从数据库(表网关)检索数据并在布局上显示。然后它应该出现在所有模块中。
我如何实现这一目标?
前 -
<?php echo $user_name; ?>
$ user_name的值应从数据库中获取并传递给布局文件。
答案 0 :(得分:1)
你不必在每个控制器中设置它。您可以将它附加到module.php中的布局变量。
public function onBootstrap(MvcEvent $e)
{
$sm = $e->getApplication()->getServiceManager();
$tableWhatever = $sm->get('tableWhatever');
$viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
$viewModel->userName = $tableWhatever->getUserName();
}
根据zf2版本的不同,您可能需要访问布局中的变量,如下所示:
$this->layout()->userName;
您还可以扩展AbstractActionController
并添加布局变量。我通常只是使用快速onBootstrap方法。
答案 1 :(得分:0)
我相信,在Zend中,你的控制器会想要:
$this->view->assign('variableName', 'variableValue');
在你看来,你会想要:
$this->variableName;
答案 2 :(得分:0)
您可以使用Zend Plugin来实现类似的目标,例如:
class MyPlugin extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
// Get instance
$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$view->user_name = 'your_username';
}
}
并在frontController中注册你的插件:
Zend_Controller_Front::getInstance()->registerPlugin(new MyPlugin());
然后在布局中,您可以这样做:
<?php echo $this->user_name; ?>