是否可以将twig函数呈现为php-code,因为我需要退出当前模板,如下所示:
{% if HostelsList|length == 0 %}
{# <div>No Data Found. </div> #}
{{ make_return() }} {# |raw #}
{% endif %}
和功能定义:
$function = new Twig_SimpleFunction('make_return', function () {
echo '<pre>make return</pre>'; // I see this output
return '<?php echo "ZZZZZ"; return; ?>'; // I DO NOT see this output and flow is not stopped rendering...
} , array('is_safe' => array('all' ) );
$this->m_twig_Environment->addFunction($function);
我也尝试在第一个语句中使用|raw
但是失败了。哪种方法正确?
谢谢!
答案 0 :(得分:1)
我查看了twig渲染文件并看到如下行:
// line 8
if ((twig_length_filter($this->env, (isset($context["HostelsList"]) ? $context["HostelsList"] : null)) == 0)) {
// line 9
echo " ";
// line 10
echo " <button type=\"button\" class=\"btn btn-info btn-lg btn-block\">No Data Found</button>
<a style=\"margin-top: -5px;\" href=\"";
// line 11
echo twig_escape_filter($this->env, (isset($context["base_url"]) ? $context["base_url"] : null), "html", null, true);
echo "admin/hostel/hostelstep1\" class=\"btn btn-primary btn-large pull-right\">New Hostel</a>
";
// line 13
echo " ";
echo call_user_func_array($this->env->getFunction('make_return')->getCallable(), array());
echo "
";
}
// line 15
没有返回php代码。
当然我可以使用{%else%} ..... {%endif%}阻止,但我更愿意找到其他决定。
在smarty中我定义了“返回”结构,如:
{if count($ToursList) eq 0}
<div>No Data Found. </div>
<a class="grey" href="admin/tour/tourstep1">New Tour</a>
{return}
{/if}
这很有帮助,因为我不想创建{else} ..... {endif}大块,特别是如果模板的大小很大。
如果smarty有一些退出(模板)结构,或者是否可以用其他方式定义它们?
谢谢!