问题2:我应该把这个更新模块导航栏的方法放在哪里?


Zend 2: Where should I put this method that updates a module's nav bar

我之前问过一个问题,关于在每个模块的基础上自动注入导航条(模板)有哪些选项。

根据其中一个建议,我在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();