我有一个控制器,它实现了用于显示帮助页面的所有路由/ url。 路线由注释定义。 我的想法是为所有帮助页面提供一个通用索引。有没有办法让控制器(从控制器内)定义的所有路由?Symfony2:获取控制器所有路由的列表
回答
你可以得到所有的路线,然后创建从一个数组,然后传递路线那个控制器给你的树枝。
这不是一个漂亮的方式,但它的工作原理.. 2.1不管怎么说..
/** @var $router \Symfony\Component\Routing\Router */
$router = $this->container->get('router');
/** @var $collection \Symfony\Component\Routing\RouteCollection */
$collection = $router->getRouteCollection();
$allRoutes = $collection->all();
$routes = array();
/** @var $params \Symfony\Component\Routing\Route */
foreach ($allRoutes as $route => $params)
{
$defaults = $params->getDefaults();
if (isset($defaults['_controller']))
{
$controllerAction = explode(':', $defaults['_controller']);
$controller = $controllerAction[0];
if (!isset($routes[$controller])) {
$routes[$controller] = array();
}
$routes[$controller][]= $route;
}
}
$thisRoutes = isset($routes[get_class($this)]) ?
$routes[get_class($this)] : null ;
你可以做的是使用CMD与(最多SF2.6)
php app/console router:debug
随着SF 2.7的命令是
php app/console debug:router
随着SF 3.0的命令是
php bin/console debug:router
它显示你所有的路线。
如果你定义了每个控制器(我推荐)的前缀例如,你可以使用
php app/console router:debug | grep "<prefixhere>"
显示出所有符合路线
要显示得到控制所有的路线,基本相同的输出 我最好使用如下所示的控制器内(它是在路由器中使用的同样的方法:在symfony的部件调试命令)
/**
* @Route("/routes", name="routes")
* @Method("GET")
* @Template("routes.html.twig")
*
* @return array
*/
public function routeAction()
{
/** @var Router $router */
$router = $this->get('router');
$routes = $router->getRouteCollection();
foreach ($routes as $route) {
$this->convertController($route);
}
return [
'routes' => $routes
];
}
private function convertController(\Symfony\Component\Routing\Route $route)
{
$nameParser = $this->get('controller_name_converter');
if ($route->hasDefault('_controller')) {
try {
$route->setDefault('_controller', $nameParser->build($route->getDefault('_controller')));
} catch (\InvalidArgumentException $e) {
}
}
}
routes.html.twig
<table>
{% for route in routes %}
<tr>
<td>{{ route.path }}</td>
<td>{{ route.methods|length > 0 ? route.methods|join(', ') : 'ANY' }}</td>
<td>{{ route.defaults._controller }}</td>
</tr>
{% endfor %}
</table>
输出将是:
/_wdt/{token} ANY web_profiler.controller.profiler:toolbarAction
等
对不起!我想从控制器中访问这些信息,以便它可以生成一个索引。 – Sammy 2013-04-11 09:40:13
我怀疑路由组件是否关心控制器。 – DerStoffel 2013-04-11 09:53:07
这意味着什么?有没有机会获得这些信息? – Sammy 2013-04-11 11:03:43
我一直在寻找这一点和搜索代码之后做的,我想出了这个解决方案,适用于单控制器(或任何实际的资源)。在Symfony 2.4上工作(我没有用以前的版本测试过):
$routeCollection = $this->get('routing.loader')->load('\Path\To\Controller\Class');
foreach ($routeCollection->all() as $routeName => $route) {
//do stuff with Route (Symfony\Component\Routing\Route)
}
- 1. Symfony2的:让所有的路由列表以及它们控制器
- 2. 获取路线控制器Symfony2的
- 3. symfony2获取路由参数(控制器参数vs请求)
- 4. 控制器中的路由。 Symfony2
- 5. Symfony2的路由找不到控制器
- 6. 获取Symfony中的控制器路由列表?
- 7. Symfony2路由访问控制
- 8. Symfony2多路由单控制器
- 9. Symfony2 - 一种获取包的所有控制器的方法?
- 10. Zend从控制器获取路由
- 11. 获取路由控制器Zend_Controller_Plugin
- 12. 获取控制器路由参数
- 13. Symfony2:路由器没有使用正确的控制器
- 14. Rails路由嵌套控制器的捕获所有
- 15. 捕获特定控制器的所有路由
- 16. Silex添加路由文件与所有路由到控制器
- 17. Symfony2直接调用控制器没有路由的动作
- 18. 由控制器名获取控制器
- 19. 如何在Symfony2的所有控制器中添加一些路由前缀?
- 20. 强制路由器在Symfony2中对某些路由使用prod控制器
- 21. 捕获所有控制器/路线
- 22. Rails.application.routes列出所有路由并确定控制器
- 23. Symfony2:控制器中操作/路由的完整路径
- 24. 在vue路由器中获取所有路由
- 25. 如何获取Symfony2控制器中文件的绝对路径?
- 26. 阻止从控制器的示波器的所有路由
- 27. Magento控制器路由是路由到控制器的noRouteAction
- 28. Ember.js使用路由器体系结构获取父路由的控制器
- 29. 如何获取路线“名称”当路由控制器
- 30. codeigniter获取所有声明的路由
这就是我错过的: $ router = $ this-> container-> get('router'); $ collection = $ router-> getRouteCollection(); $ allRoutes = $ collection-> all(); THX – Sammy 2013-04-12 06:26:40
但是这不会显示没有定义名称的路由,例如。 '@Route( “/新闻”)'。当我尝试你的方法,因为没有'name ='news_route''参数,我无法得到这条路线。任何人有类似的问题? – 2014-05-21 10:23:51
据我所知,如果您使用注释并且不声明名称,那么名称是从包名称,控制器名称和操作名称自动生成的(使用'name = news_route'只是覆盖此默认操作)。因此对于'Bills \ BlogBundle','NewsController','indexAction'这个名字会自动生成为'bills_blog_news_index'。 – qooplmao 2014-05-21 15:27:19