我如何获得所有 CakePHP 路由的列表?
How can I get a list of all CakePHP routes?
我正在尝试检索 app/Config/routes.php 中包含的所有路由的列表,并将它们显示在管理页面上。
我可以使用 $controllers = App::objects('controller');
检索 list of controllers,我想知道是否可以对路由执行相同的操作。
我试过按照下面的代码使用子字符串,但想到的问题被注释掉了路由、空格和路由的变体,例如链接到外部资源。我现在正在考虑使用 php 的分词器,但我想知道 CakePHP 是否内置了一个简单而优雅的解决方案。
$source = file_get_contents(APP . 'Config/routes.php');
$startPos = stripos($source, 'Router::connect(');
$routes = array();
while ($startPos !== false) {
$endPos = stripos($source, ';', $startPos + 15);
if($endPos !== false) {
$route = substr($source, $startPos, $endPos - $startPos);
$urlStart = stripos($route, "'");
if($urlStart !== false) {
$urlEnd = stripos($route, "'", $urlStart + 1);
$url = substr($route, $urlStart + 1, $urlEnd - $urlStart - 1);
$routes[] = array('route'=>$route, 'url'=>$url);
}
$startPos = stripos($source, 'Router::connect(', $endPos + 1);
}
}
感谢@ndm 的回答,对于任何试图检索由 CakePHP 的路由器解析的路由列表(即在 app/Config/routes.php 内)以及用于任何插件的路由列表,请使用Router::$routes
。根据您的应用程序,输出可以是 CakeRoute object, RedirectRoute object or a PluginShortRoute 对象。
$routes = Router::$routes;
echo('<pre>'); // Readable output
var_dump($routes);
echo('</pre>');
例如Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
的路由显示:
object(CakeRoute)#16 (7)
{
["keys"] => array(0) {}
["options"] => array(0) {}
["defaults"] => array(4)
{
["controller"] => string(5) "pages"
["action"] => string(7) "display"
[0] => string(4) "home"
["plugin"] => NULL
}
["template"] => string(1) "/"
}
我正在尝试检索 app/Config/routes.php 中包含的所有路由的列表,并将它们显示在管理页面上。
我可以使用 $controllers = App::objects('controller');
检索 list of controllers,我想知道是否可以对路由执行相同的操作。
我试过按照下面的代码使用子字符串,但想到的问题被注释掉了路由、空格和路由的变体,例如链接到外部资源。我现在正在考虑使用 php 的分词器,但我想知道 CakePHP 是否内置了一个简单而优雅的解决方案。
$source = file_get_contents(APP . 'Config/routes.php');
$startPos = stripos($source, 'Router::connect(');
$routes = array();
while ($startPos !== false) {
$endPos = stripos($source, ';', $startPos + 15);
if($endPos !== false) {
$route = substr($source, $startPos, $endPos - $startPos);
$urlStart = stripos($route, "'");
if($urlStart !== false) {
$urlEnd = stripos($route, "'", $urlStart + 1);
$url = substr($route, $urlStart + 1, $urlEnd - $urlStart - 1);
$routes[] = array('route'=>$route, 'url'=>$url);
}
$startPos = stripos($source, 'Router::connect(', $endPos + 1);
}
}
感谢@ndm 的回答,对于任何试图检索由 CakePHP 的路由器解析的路由列表(即在 app/Config/routes.php 内)以及用于任何插件的路由列表,请使用Router::$routes
。根据您的应用程序,输出可以是 CakeRoute object, RedirectRoute object or a PluginShortRoute 对象。
$routes = Router::$routes;
echo('<pre>'); // Readable output
var_dump($routes);
echo('</pre>');
例如Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
的路由显示:
object(CakeRoute)#16 (7)
{
["keys"] => array(0) {}
["options"] => array(0) {}
["defaults"] => array(4)
{
["controller"] => string(5) "pages"
["action"] => string(7) "display"
[0] => string(4) "home"
["plugin"] => NULL
}
["template"] => string(1) "/"
}