Php Zend 2:我应该把这个更新模块的方法放在哪里;导航条

Php Zend 2:我应该把这个更新模块的方法放在哪里;导航条,php,templates,zend-framework2,Php,Templates,Zend Framework2,我知道有哪些选项可用于在每个模块的基础上自动插入导航栏(模板) 根据其中一个建议,我在Myapp/Module/Mymodule/Module.php中添加了一个视图变量,它是模板的路径 public function onBootstrap($e) { $viewModel = $e->getApplication()->getMvcEvent()->getViewModel(); $viewModel->subNav = 'mymodule/mymod

我知道有哪些选项可用于在每个模块的基础上自动插入导航栏(模板)

根据其中一个建议,我在Myapp/Module/Mymodule/Module.php中添加了一个视图变量,它是模板的路径

public function onBootstrap($e) {
    $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
    $viewModel->subNav = 'mymodule/mymodule/subNav';
}
然后在Application/view/layout/layout.phtml中检查是否存在此变量并显示它:

        <?php if($this->subNav) : ?>
        <nav class="navbar navbar-inverse" role="navigation">
            <?php echo $this->partial($this->subNav); ?>
        </nav>
        <?php endif ?>

这与我希望的完全一样,但现在我希望从数据库传递模板动态数据


所以我的问题是:在Module.php中这样做可以吗?在onBootstrap()中,我想调用我的数据模型来访问我的数据库,并将结果存储在视图变量中。这是对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();