php - 我如何获得所有 CakePHP 路由的列表?

标签 php cakephp

我正在尝试检索包含在 app/Config/routes.php 中的所有路由的列表,并将它们显示在管理页面上。 我能够检索 list of controllers使用 $controllers = App::objects('controller'); 我想知道是否可以对路由执行相同的操作。

我已经尝试按照下面的代码使用子字符串,但想到的问题被注释掉了路由、空格和路由的变体,例如链接到外部资源。我现在正在考虑使用 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::$路线。输出可以是 CakeRoute对象、RedirectRoute 对象或 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) "/"
}

关于php - 我如何获得所有 CakePHP 路由的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754965/

相关文章:

php - 在 Php block 中调用 JavaScript,反之亦然

css - cakePHP 内联显示表单元素

php - 使用 cakephp 的无效响应 paypal IPN

cakephp - 蛋糕 3 : How to add new entity to database with primaryKey set?

cakephp - 如何在cakephp中更改 'WhoDidiT'的默认行为

cakephp - 如何在 cakephp 中定义可在整个应用程序中访问的变量?

php - MySQL 错误 `ON DUPLICATE KEY UPDATE`

php - SQL 查询返回有限的结果

php - 如何回显数据库中查询的结果?

php - 调用未定义的方法 Illuminate\Notifications\Channels\MailChannel::route()