在twig模板中运行php代码

时间:2016-03-24 11:13:54

标签: php twig

是否可以将twig函数呈现为php-code,因为我需要退出当前模板,如下所示:

{% if HostelsList|length == 0  %}
    {# <div>No Data Found.&nbsp;</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但是失败了。哪种方法正确?

谢谢!

1 个答案:

答案 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.&nbsp;</div>
    <a class="grey" href="admin/tour/tourstep1">New Tour</a>
    {return}
{/if}

这很有帮助,因为我不想创建{else} ..... {endif}大块,特别是如果模板的大小很大。

如果smarty有一些退出(模板)结构,或者是否可以用其他方式定义它们?

谢谢!