2014-01-08 59 views
1

我在Zend的控制器中,我想循環當前路由。我能夠獲得路線,但他們受到保護,所以我無法循環他們。這裏是我用什麼來獲取途徑:Zend Framework - 如何循環通過控制器中的路由

$routes = Zend_Controller_Front::getInstance()->getRouter(); 

    foreach ($routes as $key => $route) { 
     // I need to get controller and action for each $route but it is protected, see debug output of $route below to see what I am trying to access. 
    } 

我看到_routes和獲得它的名字,但我需要爲每個路由控制器和動作以及那些受到保護。任何方式來實現這一目標?我搜索了谷歌和堆棧,似乎無法找到任何東西。

編輯:只是爲了更精確地給出第一個答案。我沒有問題,得到的路由,它返回Zend_Controller_Router_Route_Chain對象的數組,我可以遍歷和看起來像這樣:

object(Zend_Controller_Router_Route_Chain)#83 (5) { 
       ["_routes":protected]=> 
      array(2) { 
       [0]=> 
       object(Zend_Controller_Router_Route_Hostname)#34 (13) { 
        ["_hostVariable":protected]=> 
        string(1) ":" 
        ... 
       } 
       [1]=> 
       object(Zend_Controller_Router_Route_Static)#78 (4) { 
        ["_route":protected]=> 
        string(0) "" 
        ["_defaults":protected]=> 
        array(3) { 
        ["module"]=> 
        string(7) "default" 
        ["controller"]=> 
        string(5) "index" 
        ["action"]=> 
        string(14) "hubverify-home" 
        } 
        ... 
       } 
       } 

回答

1

路由器默認是Zend_Controller_Router_Rewrite其中有一個方法getRoutes,從而讓所有的路線嘗試: Zend_Controller_Front::getInstance()->getRouter()->getRoutes()

編輯:既然Zend_Controller_Router_Route_Chain沒有消氣的$_routes屬性,您有兩種選擇:

A)擴展Zend_Controller_Router_Route_Chain

class My_Controller_Router_Route_Chain extends Zend_Controller_Router_Route_Chain 
{ 
    public function getRoutes() 
    { 
     return $this->_routes; 
    }  
} 

B)使用ReflectionProperty設置$ _routes爲accesable:

$prop = new ReflectionProperty(get_class($chainedRoute), '_routes'); 
$prop->setAccessible(true); 
var_dump($prop->getValue($chainedRoute)); 
+0

感謝comment.That部分是沒有問題的,我已經更新了我的問題有更多的細節,所以你可以看到我我正在嘗試訪問。非常感激! – Wapoa

+0

@Wapoa,我更新了我的答案 –

+0

謝謝我從來沒有見過ReflectionProperty在使用,這是一個很好的例子,讓我進入。非常感激。 – Wapoa

相關問題