Symfony2:如何显示选项字段文本


Symfony2: How to display choices field text?

我首先生成一个原则CRUD文件。这个表单有一个选择字段,其中包含选项值和名称。newAction和updateAction使用这个。但是index(list)Action显示的是原始值,而不是名称。如何最好的方式来显示选择名称在index.html.twig?

SampleFormType.php

$builder->add('name')
    ->add('isActive', 'choice', array(
        'choices' => array(false => 'Inactive', true => 'Active'),
        'expanded' => true,
        'multiple' => false,
    ));

index.html.twig

{% for entity in entities %}
<tr>
    <td>{{ entity.name }}</td>
    <td>{{ entity.isActive }}</td>
    <!-- Show '0' or '1', not 'Inactive' or 'Active' -->
</tr>
{% endfor %}

我应该做过滤器的小枝扩展或转换值的名称在控制器?

有许多不同的方法可以做到这一点。一个简单的是基本条件

{{ entity.isActive ? 'Active' : 'Inactive' }}

但是如果你需要在多个地方使用这个值,这可能会很快违反DRY。

我认为小枝扩展应该保留给那些不那么特定于域的东西。您可以使用宏,但它们通常还有其他用途。

架构上更合理的想法是根本不向视图发送实体对象。在MVC分离良好的系统中,ViewModel不直接交互。

考虑Symfony已经如何处理复杂对象(如表单)的视图-您可以为您的实体采用类似的模式。你甚至可以考虑使用像Fractal这样的东西,它是为超媒体api设计的,但绝对可以用于视图对象。