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

例如routing.yml:

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

如何获得这个somePage值?


当前回答

我认为这是最简单的方法:

class MyController extends Controller
{
    public function myAction($_route)
    {
        var_dump($_route);
    }

    .....

其他回答

我从中得到的只是 _internal

我用$this->getRequest()->get('_route')从控制器内部获得路由名称。 甚至代码tuxedo25也建议返回_internal

这段代码是在Symfony 1.X中所谓的“组件”中执行的;不是页面的控制器,而是页面的一部分,需要一些逻辑。

Symfony 1中的等效代码。X是:sfContext::getInstance()->getRouting()->getCurrentRouteName();

使用Symfony 4.2.7,我能够在我的树枝模板中实现以下内容,它显示了我在控制器中定义的自定义路由名。

在index.html.twig

<div class="col">
    {% set current_path =  app.request.get('_route') %}
    {{ current_path }}
</div>

在控制器中


    ...

    class ArticleController extends AbstractController {
        /**
         * @Route("/", name="article_list")
         * @Method({"GET"})
         */
        public function index() {
        ...
        }

        ...
     }

结果将“article_list”打印到浏览器中的所需页面。

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

在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>

来自ContainerAware(比如控制器):

$request = $this->container->get('request');
$routeName = $request->get('_route');