3

我有一个代码可以检查树枝模板中的一些实体常量:

{% if logRecord.status is constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_MONEY_RESERVED') %}

但是每次都用这么长的类名,实在是太尴尬了。有没有办法在 twig 中创建命名空间别名?就像是:

{% use App\\DealBundle\\Entity\\Deal %}
{% if logRecord.status is constant('Deal::DEAL_STATE_MONEY_RESERVED') %}

或者我总是需要写完整的班级名称?

4

3 回答 3

4

我遇到了同样的问题,结果证明解决方案非常简单。这个宏在我们的例子中不起作用,因为我们不仅想将常量值用于渲染,还想将其用作值(int、string、float 等)。这是不可能的,因为使用此宏 Twig 将值转换为 Twig_Markup 类。

所以解决方案是下一个。在您声明的模板中的某处:

    {% set namespace = 'App\\DealBundle\\Entity\\' %}

然后在另一个地方你可以像这样使用它:

    {% if logRecord.status is constant(namespace~'Deal::DEAL_STATE_MONEY_RESERVED') %}
于 2013-11-08T08:25:32.060 回答
1

您可以使用

{% macro state(name) -%}
   {{ constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_' ~ name) }}
{%- endmacro %}

并以这种方式使用它:

{% if logRecord.status == _self.state('MONEY_RESERVED') %}

不要忘记使用连字符 ( - ) 来删除宏中的空格。

于 2013-04-20T13:56:08.397 回答
0

我正在更新此内容,以防有人遇到与我相同的问题并且不想使用任何特殊扩展名。

@alain-tiemblo 的回答是对的,就像树枝不再识别_self物体一样。所以唯一要做的就是导入它,如下所示:

{% macro state(name) -%}
    {{ constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_' ~ name) }}
{%- endmacro %}
{# ### Remember the import! ### #}
{% import _self as localMacros %}

之后你可以使用

{% if logRecord.status == localMacros.state('MONEY_RESERVED') %}
于 2018-04-24T14:43:55.570 回答