php – symfony每个块都没有空间
如何用无空间来包装每个块代码来从我的twig / html中裁剪空白
例如现在我有: {% block content %} <div class="box clearfix clearall"> <div class="ct colcontainer"> <div class="col-1"> <div class="chars"> <table class="layout data-char"> <thead> blabla {% endblock %} 当symfony尝试渲染它时,我希望symfony看到它 {% block content %} {% spaceless %} <div class="box clearfix clearall"> <div class="ct colcontainer"> <div class="col-1"> <div class="chars"> <table class="layout data-char"> <thead> blabla {% endspaceless %} {% endblock %} 解决方法
定义自定义Twig标记(复制粘贴方式)
您可以定义一个自定义的Twig标签spacelessblock,它结合了 一个新的Twig节点 首先,定义一个类Twig_Node_SpacelessBlock(例如在包的Extension目录中): class Twig_Node_SpacelessBlock extends Twig_Node_Block { public function __construct($name,Twig_NodeInterface $body,$lineno,$tag = null) { parent::__construct(array('body' => $body),array('name' => $name),$tag); } public function compile(Twig_Compiler $compiler) { // top part of Block.compile $compiler ->addDebugInfo($this) ->write(sprintf("public function block_%s($context,array $blocks = array())n",$this->getAttribute('name')),"{n") ->indent() ; // the content of the body is treated like in Spaceless.compile $compiler ->write("ob_start();n") ->subcompile($this->getNode('body')) ->write("echo trim(preg_replace('/>s+</','><',ob_get_clean()));n") ; // bottom part of Block.compile $compiler ->outdent() ->write("}nn") ; } } 一个新的Twig令牌解析器 每当Twig在模板中找到{%spacelessblock xyz%}时,我们需要在某处构建新的Twig节点.为此,我们需要一个令牌解析器,我们称之为Twig_TokenParser_SpacelessBlock.我们基本上复制并粘贴 class Twig_TokenParser_SpacelessBlock extends Twig_TokenParser { public function parse(Twig_Token $token) { // … $this->parser->setBlock($name,$block = new Twig_Node_SpacelessBlock($name,new Twig_Node(array()),$lineno)); // … } public function decideBlockEnd(Twig_Token $token) { return $token->test('endspacelessblock'); } public function getTag() { return 'spacelessblock'; } } 告诉Twig 在您的扩展类中: class Extension extends Twig_Extension { public function getTokenParsers() { return array( new Twig_TokenParser_SpacelessBlock(),); } } 告诉Symfony 如果尚未完成,请将以下内容添加到您的services.yml中: services: # … my.extension: class: AcmeMyBundleExtensionExtension tags: - { name: twig.extension } 更好的选择 预处理器 更好的方法是使用预处理器来简单地替换 {% spacelessblock xyz %} … {% endspacelessblock %} 通过 {% block xyz %}{% spaceless %} … {% endspaceless %}{% endblock %} 它重用了已经在Twig项目中编写的所有代码,包括可能的更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |