2014-01-08 55 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

相关问题