我有一个代码可以检查twig模板中的某个实体常量:
{% 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') %}
或者我总是需要写完整的班级名称?
答案 0 :(得分:3)
我遇到了同样的问题,解决方案非常简单。这个宏在我们的例子中不起作用,因为我们不仅要将常量值用于渲染,还要用作值(int,string,float等)。这是不可能的,因为使用此宏,Twig将值转换为Twig_Markup类。
所以解决方案就是下一个。您在模板中的某处声明:
{% set namespace = 'App\\DealBundle\\Entity\\' %}
然后在另一个地方,您可以像这样使用它:
{% if logRecord.status is constant(namespace~'Deal::DEAL_STATE_MONEY_RESERVED') %}
答案 1 :(得分:1)
您可以使用macro:
{% macro state(name) -%}
{{ constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_' ~ name) }}
{%- endmacro %}
并以这种方式使用它:
{% if logRecord.status == _self.state('MONEY_RESERVED') %}
请勿忘记使用连字符( - )删除宏中的空格。
答案 2 :(得分: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') %}