基于Symfony2环境的无空间响应

时间:2012-01-10 18:39:36

标签: symfony twig

我正在寻找的是基于当前Symfony环境为整个{% spaceless %}{% endspaceless %}对象启用/禁用Response包装器的方法。我想我应该听kernel.view事件并在那里修改响应,但我无法做到。

这样做的原因是最好使用所有这些空间进行调试,但要将其缩小以便生产使用。

有人这样做过吗?

2 个答案:

答案 0 :(得分:3)

spaceless是一个Twig标签,响应将永远不会知道。

您无法轻松禁用它,因为它是Twig_Extension_Core的一部分,并且没有选项可以禁用它。

你必须找到另一种方式。 也许直接来自您的模板(使用它或不依赖于环境)。

答案 1 :(得分:0)

在您的包中实施ResponseListener:

class ResponseListener
{
    private $container;

    public function __construct($container)
    {
        $this->container = $container;
    }

    public function onKernelResponse(FilterResponseEvent $event)
    {
        // Compress HTML on prod environment only
        if($this->container->get('kernel')->getEnvironment() == 'prod')
            $event->getResponse()->setContent(trim(preg_replace('/>\s+</', '><', $event->getResponse()->getContent())));
    }
}

然后在services.yml中声明:

services:
    kernel.listener.response_listener:
        class: AppBundle\Listener\ResponseListener
        tags:
            - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
        arguments: [@service_container]