如何从Slim 3 php框架访问所有路由?

Vla*_*vić 5 php slim psr-7

我试图从Slim框架中定义的路由构建一个动态下拉菜单,这是我的问题 - 有没有办法从某种数组访问所有定义的静态路由?

例如,如果我像这样定义我的路线:

// Index page: '/'
require_once('pages/main.php');

// Example page: '/hello'
require_once('pages/hello.php');

// Example page: '/hello/world'
require_once('pages/hello/world.php');

// Contact page: '/contact'
require_once('pages/contact.php');
Run Code Online (Sandbox Code Playgroud)

每个文件都是一个单独的页面,如下所示

// Index page
$app->get('/', function ($request, $response, $args) {

    // Some code

})->setName('index');
Run Code Online (Sandbox Code Playgroud)

我想从某种数组访问所有这些定义的路由,然后使用该数组在我的模板文件中创建一个无序的HTML列表.

<ul>
  <li><a href="/">Index</a></li>
  <li><a href="/hello">Hello</a>
    <ul>
       <li><a href="/hello/world">World</a></li>
    </ul>
  </li>
  <li><a href="/contact">Contact</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

每当我更改已定义的路线时,我希望此菜单随之改变.有没有办法实现这个目标?

Wol*_*olf 11

在GitHub项目中快速搜索SlimRouter类显示了一个公共方法getRoutes(),它返回$this->routes[]路由对象的数组.从路径对象中,您可以使用以下getPattern()方法获取路径模式:

$routes = $app->getContainer()->router->getRoutes();
// And then iterate over $routes

foreach ($routes as $route) {
    echo $route->getPattern(), "<br>";
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加了示例

  • @GeorgyIvanov是的,但是您可以在迭代数组时挑选出每个对象内的属性以进行打印。 (2认同)