基于Symfony2环境的无空间响应

发布于 2024-12-25 18:01:31 字数 228 浏览 1 评论 0原文

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

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

有人做过这个吗?

What I am looking is the way to enable/disable {% spaceless %}{% endspaceless %} wrapper for the whole Response object based on current Symfony environment. I think I should listen to kernel.view event and modify response there, but I can't make it.

The reason for this is that it is better to debug with all those spaces, but keep it minified for production usage.

Has anybody done this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白龙吟 2025-01-01 18:01:31

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

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

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

The spaceless is a Twig tag, the response will never know about it.

You can't easily disable it as it's part of the Twig_Extension_Core and there is no option to disable it.

You have to find another way.
Maybe directly from your template (using it or not the depending on the environnement).

〃温暖了心ぐ 2025-01-01 18:01:31

在您的包中实现 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]

Implement a ResponseListener in your bundle:

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())));
    }
}

Then declare in services.yml:

services:
    kernel.listener.response_listener:
        class: AppBundle\Listener\ResponseListener
        tags:
            - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
        arguments: [@service_container]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文