基于 Symfony 3.4 的表单包含多个CheckboxType
字段。其中一些字段应显示为普通复选框(= 使用默认复选框小部件),而其他一些应显示为开/关开关(如 iOS UISwitche
)。
因此,在相同类型的相同表单字段中 ( CheckboxType
) 应该使用不同的小部件。我怎样才能做到这一点?
解决方案 1:当然我可以将自定义应用form_theme
到完整的表单 ( {% form_theme form 'AppBundle:Form:myTheme.html.twig' %}
)。但这会影响表单中的所有复选框,而不仅仅是一个。所以这不是解决方案。
解决方案 2:一种可行的解决方案是使用其 id 将不同的小部件应用于一个特定字段:
{% block _user_registration_form_someCheckBoxRow %} ... {% endblock %}
虽然此解决方案有效,但我将不得不为所有受影响的表单中的所有受影响的字段创建/覆盖相同的块。这非常麻烦,因此不是一个好的解决方案。
解决方案 3:另一个可行的解决方案是创建一个自定义项,FormType
供应显示为开关的复选框使用。此表单类型将扩展CheckboxType
并且除了重写blockPrefix
.
虽然这非常接近于一个好的解决方案,但有一个主要缺点:假设复选框开关有不同的主题/小部件。一个标签在顶部,一个标签在开关旁边,等等。这些样式中的每一个不仅需要自己的小部件,还需要自己的表单类型,需要在 等中注册。这当然可以FormPass.php
工作但也相当麻烦且容易出错。
所以,这将是解决方案,但不是nice
一个。
难道没有更好的办法吗?我正在寻找类似的东西{{ form_row(form.someCheckbox, 'someWidget') }}
。每个主题只有一个额外的文件,并且可以准确地分辨出哪个字段使用哪个主题。不需要额外的类、配置等。我以这种方式一无所获。
使用虚拟表单类型真的是最好的解决方案吗?
一只萌萌小番薯
暮色呼如