通过阅读有关从Zend开始的所有帖子和教程,我有点困惑,因为有很多不同的方法来解决问题。
我只需要一些关于我的代码的反馈,以了解我是否在正确的轨道上。
要简单地为我的网站获取(硬编码)导航(取决于谁登录),我使用postDispatch
方法构建一个Controller插件:
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$menu = new Menu();
//Render menu in menu.phtml
$view = new Zend_View();
//NEW view -> add View Helper
$prefix = 'My_View_Helper';
$dir = dirname(__FILE__).'/../../View/Helper/';
$view->addHelperPath($dir,$prefix);
$view->setScriptPath('../application/default/views/scripts/menu');
$view->menu = $menu->getMenu();
$this->getResponse()->insert('menu', $view->render('menu.phtml'));
}
我是否需要再次设置辅助路径?
我是在一个名为ViewSetup
的插件控制器中完成的。在那里,我为视图做了一些设置,比如doctype,headlinks和helper路径(这一步来自本书:Zend Framework in Action)。
启动的Menu
类如下所示:
class Menu
{
protected $_menu = array();
/**
* Menu for notloggedin and logged in
*/
public function getMenu()
{
$auth = Zend_Auth::getInstance();
$view = new Zend_View();
//check if user is logged in
if(!$auth->hasIdentity()) {
$this->_menu = array(
'page1' => array(
'label' => 'page1',
'title' => 'page1',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page1'))
),
'page2' => array(
'label' => 'page2',
'title' => 'page2',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page2'))
),
'page3' => array(
'label' => 'page3',
'title' => 'page3',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page3'))
),
'page4' => array(
'label' => 'page4',
'title' => 'page4',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page4'))
),
'page5' => array(
'label' => 'page5',
'title' => 'page5',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page5'))
)
);
} else {
//user is vom type 'client'
//..
}
return $this->_menu;
}
}
这是我的视图脚本:
<ul id="mainmenu">
<?php echo $this->partialLoop('menuItem.phtml',$this->menu) ?>
</ul>
到目前为止这是有效的。我的问题是:通常这样做吗?还有什么可以改进的吗? 我是Zend的新手,我在网上看到过不常用的教程,这些教程通常并不明显。即使这本书已被弃用,也提到了自动加载器。
答案 0 :(得分:0)
您不应该创建新视图。由于您已经在Boostrap中创建了View对象(并用它来渲染网站的其余部分),因此您应该获取已创建的视图对象。
如果您使用Zend_Application_Resource在引导程序中设置视图,可以像这样获取它:
$view = Zend_Controller_Front::getInstance()
->getParam('bootstrap')
->getResource('view');
这样就不需要再次设置视图助手路径并创建另一个视图对象。
如果您没有使用Zend_Application来提升您的应用程序,您可以尝试这样的事情:
$view = Zend_Layout::getMvcInstance()->getView();
答案 1 :(得分:0)
除非你在相对较小的一方工作,否则我不会在控制器中这样做, 因为你必须将它添加到许多控制器。 为什么不检查引导程序,甚至检查你的布局对我来说更有意义,尽管它不合适。