我之前问过一个问题,关于在每个模块的基础上自动注入导航条(模板)有哪些选项。
根据其中一个建议,我在Myapp/Module/Mymodule/Module.php中添加了一个视图变量,这是模板的路径
public function onBootstrap($e) {
$viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
$viewModel->subNav = 'mymodule/mymodule/subNav';
}
然后在Application/view/layout/layout中。php检查这个变量是否存在并显示它:
<?php if($this->subNav) : ?>
<nav class="navbar navbar-inverse" role="navigation">
<?php echo $this->partial($this->subNav); ?>
</nav>
<?php endif ?>
这完全像我想要的那样工作,但是现在我想从数据库传递模板动态数据。
我的问题是:在module。php中这样做是可以的,对吧?在onBootstrap()中,我想调用我的数据模型来访问我的DB并将结果存储在视图变量中。这是Module.php的误用吗?这种操作应该在控制器中完成,但我希望这个模板被自动注入,而不需要控制器知道它。我是MVC和zend的新手,想确保我没有违反一些基本的设计原则。
创建一个自定义视图助手,在其中加载数据并渲染视图,并在布局中使用它
namespace Application'View'Helper;
use Zend'View'Helper'AbstractHelper;
class MyNav extends AbstractHelper{
public function __invoke(){
//load your data
return $this->view->render('my nav view script',array('data'=>$data))
}
}
模块配置文件
'view_helpers' => array(
'invokables' => array(
'mynav' => 'Application'View'Helper'MyNav',
),
),
在布局$this->mynav();