我正在使用 Twig 并且我希望能够缩小 HTML 输出。我该怎么做呢?我尝试过
{% spaceless %}
,但这需要将其添加到我的所有模板中。我可以在 Twig 引擎中添加缩小功能吗?
这可能对你帮助不大。
使用
html-compress-twig
,您可以将 .html
、.css
、.js
压缩在一个包中。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 }}
例如,您的
src/Controller
目录中有 BaseController。
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。
在
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);
}
}
基于这篇文章
使用
{% spaceless %}
YOUR WHOLE PAGE GOES HERE HTML, TWIG, JS EVERYTHING...
{% endspaceless %}
可能是你的twig版本无法识别标签,只需更新最新版本的twig即可。
这将缩小生成的输出 html,并且页面加载将会上升,因为它只加载 html 的编译版本。
虽然你仍然可以在可读的情况下查看代码。