2

新手Zend框架開發人員試圖找出Zend路由問題的簡單解決方案。我相信你們中的一位專業人員可以伸出援助之手。Zend_Navigation在編寫控制器/操作時與Zend_Router不兼容?

我有一個網站(使用Zend_Navigation建立在Zend框架中),其中包含75%的靜態HTML頁面內容和一些控制器。頂級導航是在Zend_Navigation中構建的,通過partials循環。

因爲我的工作,我沿着這些線建立了很多網站(包含很多靜態頁面),所以我想要正確地做到這一點。我不想爲每個靜態頁面設置控制器和操作(有很多),我想創建一個解決方案,我使用Zend_Controller_Router_Route將所有靜態內容自動路由到其工作的StaticController是包含或呈現.phtml頁面基於控制器/動作配對在某種目錄的URL如/layouts/staticpages

由於搜索引擎優化和各種原因,我不希望有控制器配對的URL這些靜態頁面是可見的/static/page/page1 ...它必須是「真實世界描述的」 /section/page(如advantages/someadvantage)的

這裏的問題是:使用Zend_Controller_Router_Route當我設置正確的路線時可以完成這項工作,但是它使用Zend Navigation導致了糟糕的事情......我認爲是因爲Zend_Navigaion在飛控制器/動作切換時不能很好地工作。

代碼示例:

$router = Zend_Controller_Front::getInstance()->getRouter(); 
$route = new Zend_Controller_Router_Route('advantages/:page/*', 
    array('controller' => 'static', 'action' => 'display', 'mode' => 'advantages', 
    'page' => 'index')); 
$router->addRoute('advantages', $route); 

這一處理的部分不夠好切換的「後發優勢」網頁的工作,但Zend_Navigation的自動控制器/動作的寫作和「積極」的節點高亮最終被全部擰因爲它現在認爲它的控制器是「靜態的」而動作是「顯示」的。

Zend_Navigation從根本上與Zend_Controller_Router_Route不兼容?有沒有更好的方法來做這個單一的靜態頁面控制器或處理板上的靜態內容?

+0

您可以編輯您的問題,以包括如何將您的頁面添加到Zend_Navigation的例子嗎? – 2011-02-10 14:54:26

回答

0

由於您對所有靜態頁面使用一個控制器/操作,因此您必須在顯示它之前自定義您的Zend導航。

檢查Example 4 in the Zend Documentation

// the following route is added to the ZF router 
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name 
    new Zend_Controller_Router_Route(
     'a/:id', 
     array(
      'module'  => 'news', 
      'controller' => 'article', 
      'action'  => 'view', 
      'id'   => null 
     ) 
    ) 
); 

// a page is created with a 'route' option 
$page = new Zend_Navigation_Page_Mvc(array(
    'label'  => 'A news article', 
    'route'  => 'article_view', 
    'module'  => 'news', // required for isActive(), see note above 
    'controller' => 'article', // required for isActive(), see note above 
    'action'  => 'view', // required for isActive(), see note above 
    'params'  => array('id' => 42) 
)); 

// returns: /a/42 
$page->getHref();