脚本宝典收集整理的这篇文章主要介绍了php – symfony每个块都没有空间,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
例如现在我有:
{% 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标签spacelessblock,它结合了block
和spaceless
.然后您可以在模板中使用{%spacelessblock xyz%} … {%endspacelessblock%}.以下是快速和脏(复制和粘贴)方式的方法.
一个新的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("}\n\n") ; } }
每当Twig在模板中找到{%spacelessblock xyz%}时,我们需要在某处构建新的Twig节点.为此,我们需要一个令牌解析器,我们称之为Twig_TokenParser_SpacelessBlock.我们基本上复制并粘贴Twig_TokenParser_Block
:
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: Acme\MyBundle\Extension\Extension tags: - { name: twig.extension }
更好的选择
{% spacelessblock xyz %} … {% endspacelessblock %}
通过
{% block xyz %}{% spaceless %} … {% endspaceless %}{% endblock %}
以上是脚本宝典为你收集整理的php – symfony每个块都没有空间全部内容,希望文章能够帮你解决php – symfony每个块都没有空间所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。