2010-12-08 99 views
1

我的應用程序中有構成導航樹的頁面。我想使用請求的值動態地將頁面插入到我的導航中。我已經有了查找頁面的邏輯,然後調用addPage()方法。我正在尋找的是如何輕鬆地將Zend_Controller_Request值傳遞給Zend_Navigation_Page::factory(),以便我可以添加該頁面。也許甚至寫成插件?從Zend_Controller_Request創建一個Zend_Navigation_Page_Mvc實例


解決方案

AngelP得到的最接近,所以我給他的信用,但這裏是我的解決方案:

$request = $this->getRequest(); 
if ($page = $this->view->siteNav->findBy('id', $page_id)) { 
    $page->addPage(Zend_Navigation_Page::factory($request->getParams()) 
      ->setParams($request->getParams()) 
      ->setLabel($this->view->title) 
      ->setVisible(false)); 
} 

此代碼是從控制器動作執行。 $this->view->siteNav是我在視圖中的Zend_Navigation的一個實例。從Zend_Controller_Request實例中的getParams()很容易傳遞給Zend_Navigation_Page::factory(),然後傳遞給Zend_Navigation_Page_Mvc實例的setParams()方法。

回答

1

我已經在目前有限的資源,所以我真的不能查我的建議,但如果你在你控制的時候,你爲什麼不..

 

$controller = $this->_request->getControllerName(); 
$action = $this->_request->getActionName(); 

$page = new Zend_Navigation_Page(array(
        'label' => "Sonny's Page", 
        'controller' => $controller, 
        'action' => $action 
)); 
 

也許你可以使用它作爲一個插件所以你超載你的看法?然後添加到您的導航容器?

乾杯,
天使

+0

我知道如何通過使用手動構建的key =>值數組來構建`Zend_Navigation_Page`,但希望通過使用`Zend_Controller_Request`中的某些方法來獲得一些快捷方式。 – Sonny 2010-12-08 22:15:45

0

爲什麼不將實例存儲在Zend_Registry中,然後從插件,模塊引導程序或操作控制器的postDispatch中將頁面添加到原始的導航?

+0

我沒有按照你的回答。我在視圖變量中設置了`Zend_Navigation`實例。我對這部分沒有問題。我想在特定的控制器動作中添加頁面,並且我已經知道如何完成該部分。我不知道的是如何使用Zend_Controller_Request簡單地創建一個Zend_Navigation_Page_Mvc實例。 – Sonny 2010-12-08 16:55:34

1

因爲我們不知道你已經寫的代碼,我只是猜測......

您需要:

  • 檢索實際Zend_Navigation在navigation()查看幫助中使用的容器
  • 從請求中檢索到的數據數組中創建新的Zend_Navigation_Page實例
  • 頁面添加到容器
  • 新容器分配到導航幫助

這應該很容易。剩下的,你需要知道:

  • 如何寫控制器插件與preDispatch方法,並把有上述情況,
  • 如何在這個插件訪問當前視圖實例(從視圖渲染器或應用程序資源/ bootstrap)

然後在插件中,您在視圖中像往常一樣操作導航視圖助手。

希望這個澄清了一些事情。

+0

從「您需要:」列表我有步驟1,3和4全部解決。它希望能夠通過調用`$ this-> getRequest()`來從控制器動作中可用的`Zend_Controller_Request`實例中的方法創建一個`Zend_Navigation_Page`實例。 – Sonny 2010-12-08 22:19:07