我首先生成一个原则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分离良好的系统中,View和Model不直接交互。
考虑Symfony已经如何处理复杂对象(如表单)的视图-您可以为您的实体采用类似的模式。你甚至可以考虑使用像Fractal这样的东西,它是为超媒体api设计的,但绝对可以用于视图对象。