2010-03-16 53 views
0

我有點困惑,閱讀所有關於從Zend開始的帖子和教程,因爲有很多不同的方式來解決問題。使用Zend Framework構建模塊化網站:我是否正確?

我只是需要一些關於我的代碼的反饋,以瞭解我是否在正確的軌道上。

爲了簡單地得到一個(硬編碼)導航我的網站(取決於誰是登錄)我建立一個控制器插件有postDispatch方法:

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; 
} 
} 

Here's我的看法腳本:

<ul id="mainmenu"> 
    <?php echo $this->partialLoop('menuItem.phtml',$this->menu) ?> 
</ul> 

這是工作至今。我的問題是:通常是這樣做的;有什麼需要改進的嗎? 我是Zend的新手,我在網上看到了經常不太明顯的棄用教程。即使這本書已經在提及自動加載器的地方被棄用了。

回答

0

你不應該創建一個新的視圖。由於您已經在Boostrap中創建了View對象(並用它來渲染網站的其他部分),因此您應該獲取已創建的視圖對象。

如果使用Zend_Application_Resource設置你的引導視圖,你可以這樣取,

$view = Zend_Controller_Front::getInstance() 
    ->getParam('bootstrap') 
    ->getResource('view'); 

這樣就沒有必要再設置視圖助手路徑,然後再創建視圖對象。

如果你不使用Zend_Application到自舉你的應用程序,你可以嘗試這樣的事:

$view = Zend_Layout::getMvcInstance()->getView(); 
+0

炒作與第二個解決方案! 非常感謝!我喜歡這裏的網站。比論壇更快速的迴應。 如果你能告訴我這兩種情況之間的區別,那會很好。 是否有推薦的解決方案? – Oliver

+0

我不會說有推薦的解決方案。這取決於您的應用程序設置。 –

0

除非你是在一個相對較小側的工作,我不會做這樣的控制器, 因爲您必須將其添加到許多控制器。 爲什麼不檢查引導程序或者甚至檢查你的佈局對我來說會更有意義,儘管它不合適。