Symfony 在非主操作中获取当前路由

Symfony 在非主操作中获取当前路由,symfony,Symfony,我需要在另一个模板中获取主操作的路径,该路径已在模板中呈现。如何获得价值 如果我试图从$this->container->get'request'->get'u internal'或$this->container->get'request'->get'u internal'获取路由,它们都是空的 目前,我只有一些这样的解决方法 {% render(controller("DemBackendBundle:Default:changeWebsite", { 'redirect': app

我需要在另一个模板中获取主操作的路径,该路径已在模板中呈现。如何获得价值

如果我试图从$this->container->get'request'->get'u internal'或$this->container->get'request'->get'u internal'获取路由,它们都是空的

目前,我只有一些这样的解决方法

{% render(controller("DemBackendBundle:Default:changeWebsite", {
    'redirect': app.request.attributes.get('_route') 
})) %}

但我在这里读到这并不是一个好办法。

在Symfony 2.4问世之前,您所寻求的将是不可能的。目前,Symfony 2.4正在开发中,而且还没有稳定的版本

在Symfony2.4中,您将能够使用

然而,我之所以引用“不可能”是有原因的,因为它是可行的,但并不漂亮:

创建服务 使其侦听kernel.request事件 在您定义为在事件发生时调用的方法中,您将获得as参数。 使用GetResponseEvent::getRequest方法从中获取对请求的引用。 检查请求是否为主请求,如下所示:

    if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
        // extract route
    }
<?php

namespace Acme\DemoBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class AcmeRequestListener
{
    /**
     * @var string
     */
    private $route;

    public function onKernelRequest(GetResponseEvent $event)
    {
        if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
            $this->route = $event->getRequest()->get('_route');
        }
    }
}
如果是,提取路径

所以基本上你的服务应该是这样的:

    if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
        // extract route
    }
<?php

namespace Acme\DemoBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class AcmeRequestListener
{
    /**
     * @var string
     */
    private $route;

    public function onKernelRequest(GetResponseEvent $event)
    {
        if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
            $this->route = $event->getRequest()->get('_route');
        }
    }
}

嗯。。。这听起来很难达到这个基本目的。配置中总共需要8行有效的代码和5行yaml代码来标记和配置这个类作为服务,使它成为13行:。正如我所说的,它并不漂亮,但确实起到了作用,在你完成之后,你就可以用非常优雅的方式在模板中获得路线了,因为你很幸运:Symfony 2.4 stable今天发布了::