我在Zend的控制器中,我想循环遍历当前路线。我能够获得路线,但它们受到保护,所以我无法循环它们。以下是我用来获取路线的信息:
$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并获得了它的名称,但我需要每条路线的控制器和动作,这些都受到保护。有没有办法实现这个目标?我已经搜索过Google和Stack,但似乎找不到任何东西。
编辑:只是在给出第一个答案的情况下再详细说明。我没有问题获取路由,它返回一个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"
}
...
}
}
答案 0 :(得分:1)
默认路由器为Zend_Controller_Router_Rewrite
,其方法为getRoutes
,因此尝试获取所有路由:
Zend_Controller_Front::getInstance()->getRouter()->getRoutes()
编辑:由于Zend_Controller_Router_Route_Chain没有$_routes
属性的getter,你有两个选择:
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设置为可访问:
$prop = new ReflectionProperty(get_class($chainedRoute), '_routes');
$prop->setAccessible(true);
var_dump($prop->getValue($chainedRoute));