Sonata Admin向ListMapper添加自定义变量

时间:2016-03-01 08:20:51

标签: php symfony sonata-admin

这就是我目前的做法,有更好的方式,还是更合适的方式?

protected function configureListFields(ListMapper $listMapper)
{
     $this->sale_type_arr = array('1'=>'Value1','2'=>'Value2');

     $listMapper
          ->add('saleType','string', array(
            'template' =>  'AppBundle:ItemAdmin:list_saleType.html.twig',
            'label'=>'saleType'
        ))
        ...
}

我的模板文件如下:

<td>
{% if object.saleType !='0' %}
{{ attribute( admin.sale_type_arr, object.saleType) }}
{% endif %}
</td>

一切正常,没问题,只是感觉不对。应该有一种方法如何直接注入数组值,基于add(..)中的Items数据库值。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我建议您不要在字段中使用{{attribute(...)}}。在可视化模板时,范围完全隐藏。

更好的解决方案是直接在模板中设置关联数组。从架构的角度来看,它并不理想,但为您提供最佳的代码可见性。

请参阅下面的建议(我为完整模板编写了所有必要的代码):

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}

    {% set sale_type_arr_custom = {1: 'Value1', 2: 'Value2'} %}
    {% if object.saleType !='0' %}

        {# Additionaly, protect for unknown key #}
        {% if object.saleType in sale_type_arr_custom|keys %}
            {{ sale_type_arr_custom[object.saleType] }}
        {% endif %}

    {% endif %}

{% endblock %}