Zend 2:我应该在哪里放置更新模块导航栏的方法

时间:2014-03-10 19:51:37

标签: php templates zend-framework2

previously asked a question关于可以在每个模块的基础上自动注入导航栏(模板)的选项。

根据其中一条建议,我在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的新手,并希望确保我没有违反一些基本的设计原则。

1 个答案:

答案 0 :(得分:2)

创建自定义视图助手,在其中加载数据并渲染视图并在布局中使用

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();