如何使用 Twig 缩小 HTML?

问题描述 投票:0回答:4

我正在使用 Twig 并且我希望能够缩小 HTML 输出。我该怎么做呢?我尝试过

{% spaceless %}
,但这需要将其添加到我的所有模板中。我可以在 Twig 引擎中添加缩小功能吗?

twig minify
4个回答
5
投票

这可能对你帮助不大。

使用

html-compress-twig
,您可以将
.html
.css
.js
压缩在一个包中。
使用composer安装
composer require nochso/html-compress-twig
,并且你必须使用此代码添加Extension with twig。

$app->extend('twig_theme', function($twig_theme, $ojt) {
$twig_theme->addExtension(new nochso\HtmlCompressTwig\Extension());
return $ojt_theme;});

最后到你的模板文件中添加此代码。

{% htmlcompress %} ....your coding... {% endhtmlcompress %}
{{ htmlcompress('<ul> <li>') }}
{{ '<ul> <li>'|htmlcompress }}

3
投票

例如,您的

src/Controller
目录中有 BaseController。

  1. 你应该创建BaseController
  2. 从控制器扩展它
  3. 重写Controller类的渲染方法
  4. 并在每个控制器中使用此方法
class BaseController extends Controller {
protected function render($view, array $parameters = array(), Response $response = null)
    {
        if ($this->container->has('templating')) {
            $content = $this->container->get('templating')->render($view, $parameters);
        } elseif ($this->container->has('twig')) {
            $content = $this->container->get('twig')->render($view, $parameters);
        } else {
            throw new \LogicException('You can not use the "render" method if the Templating Component or the Twig Bundle are not available. Try running "composer require symfony/twig-bundle".');
        }

        if (null === $response) {
            $response = new Response();
        }
        $content = preg_replace(array('/<!--(.*)-->/Uis',"/[[:blank:]]+/"),array('',' '),str_replace(array("\n","\r","\t"),'',$content));
        $response->setContent($content);

        return $response;
    }
}

您还可以在其他控制器中扩展BaseController。


0
投票

kernel.response
事件上使用监听器来自动化该过程:

config/services.yaml

services:
    // ...
    app.listener.compression:
        class: App\Event\CompressionSubscriber
        arguments:
        tags:
            - { name: kernel.event_subscriber }

src/Event/CompressionSubscriber.php

<?php

namespace App\Event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class CompressionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::RESPONSE => ['onKernelResponse', -256]
        ];
    }

    public function onKernelResponse($event)
    {
        if ($event->getRequestType() != HttpKernelInterface::MAIN_REQUEST) {
            return;
        }
        $response = $event->getResponse();
        $content = preg_replace(
            ['/<!--(.*)-->/Uis',"/[[:blank:]]+/"],
            ['',' '],
            str_replace(["\n","\r","\t"], '', $response->getContent())
        );
        $response->setContent($content);
    }
}

基于这篇文章


-9
投票

使用

{% spaceless %}
YOUR WHOLE PAGE GOES HERE HTML, TWIG, JS EVERYTHING...
{% endspaceless %}

可能是你的twig版本无法识别标签,只需更新最新版本的twig即可。

这将缩小生成的输出 html,并且页面加载将会上升,因为它只加载 html 的编译版本。

虽然你仍然可以在可读的情况下查看代码。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.