【问题标题】:Use namespace alias in twig在树枝中使用命名空间别名
【发布时间】:2013-04-13 10:22:01
【问题描述】:

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

{% 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') %}

或者我总是需要写完整的类名?

【问题讨论】:

  • 你总是需要写完整的类名。有没有想过creating a twig test 这样你就可以像if logRecord.status is state('reserved') 那样做?
  • 是的,你可以为此编写一个 twig 函数。
  • @Maerlyn 是的,我可能会为它进行自定义测试。谢谢!

标签: php symfony namespaces twig


【解决方案1】:

您可以使用macro

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

并以这种方式使用它:

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

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

【讨论】:

  • 哦不,它不起作用:Object of class Twig_Markup could not be converted to int。所以它返回一个宏对象,而不是它的值。
  • 我对其进行了测试并且它有效 :-) 但是您只是忘记了我警告的操作:在您的 {%%} 中添加连字符(看看我的示例)。或者在一行中使用{% macro state(name) %}{{ constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_' ~ name) }}{% endmacro %} 来避免空格问题。
  • 不,我没有忘记。我什至像你说的那样在一行中测试了它。但是还是有同样的错误:(
  • 你能在这里复制/粘贴吗?你的 Symfony2 版本是什么?
  • Symfony 2.1。也许是这样? Marco 和它的用法和你的完全一样。
【解决方案2】:

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

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

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

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

    {% if logRecord.status is constant(namespace~'Deal::DEAL_STATE_MONEY_RESERVED') %}

【讨论】:

    【解决方案3】:

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

    @alain-tiemblo 的回答是对的,就像 twig 不再识别 _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') %}
    

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2018-07-24
      相关资源
      最近更新 更多