在标题中指定它有点困难,因此我将举一个具体的例子。
我创建了一个名为 FlashcardType 的表单类,其中有buildForm()
方法并在其中包含以下代码
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('exampleSentence', CheckboxType::class, [
'label' => 'Example sentence'
])
->add('pronunciation', CheckboxType::class, [
'label' => 'Pronunciation'
])
->add('sortBy', ChoiceType::class, [
'label' => 'Sort by',
'choices' => [
'Date increase' => 1,
'Date decrease' => 2,
'Word alphabetically' => 3,
'Word not alphabetically' => 4
]
])
->add('save', SubmitType::class, [
'label' => 'Submit'
]);
}
因此结果表单将包含2个复选框,一个 select下拉列表和提交按钮。 在控制器内部,我将此表单传递给createView()方法进行查看。
为了使这个问题更简短,我们仅以第一个复选框为例。 因此,在Twig文件中,我的代码如下:
{# ...form code... #}
<div class="form-check form-check-inline mr-4">
{{ form_widget(form.exampleSentence, {'attr': {'class': 'form-check-input'}}) }}
{{ form_label(form.exampleSentence, null, {
'label_attr': {'class': 'form-check-label'}
}) }}
</div>
{# ...form code... #}
对于复选框类型(不仅限于此),我们可以在创建formBuilder()
表单时设置options outputted in the table。但是many of these options我们可以在Twig函数中覆盖。
对于第一个复选框,我将标签设置在buildForm()
内,但也可以将其设置在{{ form_label() }}
Twig函数内。而且我可以将其用于许多(如果不是每种)选项和类型。
那么,表单生成器和Twig表单函数内部的写选项之间有什么区别?我们应该在builder里面写哪个选项,在Twig里面写哪个选项?在这种情况下是否有一些好的做法?
提前感谢您提供所有答案!