我正在寻找的是基于当前Symfony环境为整个{% spaceless %}{% endspaceless %}
对象启用/禁用Response
包装器的方法。我想我应该听kernel.view
事件并在那里修改响应,但我无法做到。
这样做的原因是最好使用所有这些空间进行调试,但要将其缩小以便生产使用。
有人这样做过吗?
答案 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]