Forms Symfony:将小部件添加到已定义的表单中

Forms Symfony:将小部件添加到已定义的表单中,forms,symfony1,widget,Forms,Symfony1,Widget,我想以已经定义的形式(使用configure方法)添加小部件(复选框) 我不能将它们添加到表单的定义中,因为小部件的数量不同(取决于对象) 我看到两种方法: 要么将变量传递到表单的configure方法中,要么使用嵌入式表单 但哪一种方法是正确的呢?还有别的解决办法吗 谢谢正确的方法是将对象直接传递到选项中。在表单中,您可以使用$this->getOption方法检索传递的选项。我同意Don Pinkster关于传递选项的观点,并使用它在configure()方法中配置表单 但如果在实例化类时需

我想以已经定义的形式(使用configure方法)添加小部件(复选框)

我不能将它们添加到表单的定义中,因为小部件的数量不同(取决于对象)

我看到两种方法:

要么将变量传递到表单的configure方法中,要么使用嵌入式表单

但哪一种方法是正确的呢?还有别的解决办法吗


谢谢

正确的方法是将对象直接传递到选项中。在表单中,您可以使用
$this->getOption
方法检索传递的选项。

我同意Don Pinkster关于传递选项的观点,并使用它在configure()方法中配置表单

但如果在实例化类时需要它或无法获取值,则可以在任何位置使用:

$form->getWidgetSchema()->offsetSet($name, $widget);
$form->getValidatorSchema()->offsetSet($name, $validator)
您使用嵌入式表单或小部件的事实不会有太大变化,因为您可以在表单初始配置后执行此操作:

$form->embedForm($name, $form2);
仅举一个复选框,我看不到使用嵌入式表单的优势。 在这两种情况下,我建议您在表单类的公共方法中执行此操作,以避免在action类或其他地方爆炸表单配置


关于,

我们可以在选项中传递任何类型的数据吗?是否需要传递构造函数中的选项,如
$this->form=newmyform(array(),array(“variable”=>test”)?正确,它接受和类型的选项。您的构造函数也是正确的。谢谢您的解释,我不知道在实例化表单之后可以在模式中添加小部件!!但是,如果表单是手动创建的,而不是从条令/推进模型生成的,可以吗?使用getWidgetSchema()->offsetSet尝试了几次后,我无法让它工作。此方法似乎只在configure方法中起作用:'(它也适用于条令生成的表单。要编辑表单类之外的架构,我认为您需要在forme类上重新设置widget/validatorSchema,就像embedForm所做的那样。