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