Twig:动态属性的类型

时间:2016-12-07 11:15:41

标签: php symfony twig

目前,在我的索引页面中,我显示了动态对象和动态属性中对象属性的值。

{% for object in objects %}
    <tr>
        {% for property in properties %}
            <td>{{ attribute(object, property) }}</td>
        {% endfor %}                  
    </tr>
{% endfor %}

这里的对象和属性都是动态的。我将属性的值输出为attribute(object, property)。但布尔类型一些属性。目前,这些布尔属性的输出为01。我需要输出noyes而不是01。我怎么能这样做?

一种选择可能是找出财产的类型。但我不知道如何从动态对象和属性中获取属性的类型。

编辑:大多数答案都在考虑所有属性都是布尔类型。但其中一些是布尔值,其中一些不是布尔值。

3 个答案:

答案 0 :(得分:0)

使用

相同

您可能需要考虑使用 same as Twig功能实现Twig条件语句(可插入Twig宏):

{% for object in objects %}
    <tr>
        {% for property in properties %}
            {% if attribute(object, property) is same as(true) %}
                <td>yes</td>
            {% elseif attribute(object, property) is same as(false) %}
                <td>no</td>
            {% else %}
                <td>{{ attribute(object, property) }}</td>
            {% endif %}
        {% endfor %}                  
    </tr>
{% endfor %}

same as 文档中所述:

  

相同,检查变量是否与另一个变量相同。这相当于PHP中的===

答案 1 :(得分:0)

如果您的属性函数仅返回0,1您也可以尝试 ternary 运算符:

{% for object in objects %}
    <tr>
        {% for property in properties %}
            <td>{{ attribute(object, property) ? 'Yes' : 'No'}}</td>
        {% endfor %}                  
    </tr>
{% endfor %}

修改:您可以尝试 in

{% set boolArray = [1, 0] %}

{% for object in objects %}
    <tr>
        {% for property in properties %}
            <td>
                {% if attribute(object, property) in boolArray %}
                    {{ attribute(object, property) ? 'Yes' : 'No'}}
                {% else %}
                    {{ attribute(object, property)}}
                {% endif%}
            </td>
        {% endfor %}
    </tr>
{% endfor %}

答案 2 :(得分:0)

我更喜欢将翻译组件用于此类工作,例如:

        <td>{{ ('label-' ~ attribute(object, property))|trans }}</td>

并使用翻译文件作为示例:

资源/翻译/ messages.en.yml

label-1: yes
label-true: yes
label-0: no
label-false: no

希望这个帮助