如何在Symfony 2中获取当前路由?

例如routing.yml:

somePage:
   pattern: /page/
   defaults: { _controller: "AcmeBundle:Test:index" }

如何获得这个somePage值?


当前回答

对于任何需要Symfony 3当前路由的人,这是我使用的

<?php
   $request = $this->container->get('router.request_context');
   //Assuming you are on user registration page like https://www.yoursite.com/user/registration
   $scheme = $request->getScheme(); //This will return https
   $host = $request->getHost(); // This will return www.yoursite.com
   $route = $request->getPathInfo(); // This will return user/registration(don't forget this is registrationAction in userController
   $name = $request->get('_route'); // This will return the name.
?>

其他回答

对于任何需要Symfony 3当前路由的人,这是我使用的

<?php
   $request = $this->container->get('router.request_context');
   //Assuming you are on user registration page like https://www.yoursite.com/user/registration
   $scheme = $request->getScheme(); //This will return https
   $host = $request->getHost(); // This will return www.yoursite.com
   $route = $request->getPathInfo(); // This will return user/registration(don't forget this is registrationAction in userController
   $name = $request->get('_route'); // This will return the name.
?>

在Symfony 3.3中,我使用了这种方法,并且运行良好。

我有4条路线

Admin_category_index, admin_category_detail, admin_category_create, admin_category_update

只有一行为所有路由创建了一个活动类。

<li  {% if app.request.get('_route') starts with 'admin_category' %} class="active"{% endif %}>
 <a href="{{ path('admin_category_index') }}">Product Categoires</a>
</li>

使用Twig: {{app.request.attributes.get('_route')}}

Symfony 2.0 - -2.1 用这个:

    $router = $this->get("router");
    $route = $router->match($this->getRequest()->getPathInfo());
    var_dump($route['_route']);

这个不会给你_internal。

针对Symfony 2.2+的更新:启动Symfony 2.2+时无法正常工作。我打开了一个漏洞,答案是“故意的”。如果希望在子操作中获取路由,则必须将其作为参数传入

{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}

你的控制器:

public function menuAction($route) { ... }

如果你想在你的控制器中获取路由名,那么你必须注入请求(而不是从容器中获取,因为Symfony UPGRADE,而不是调用get('_route')。

public function indexAction(Request $request)
{
    $routeName = $request->get('_route');
}

如果你想在twig中获取路由名,你必须像这样

{{ app.request.attributes.get('_route') }}