met*_*rez 11 php forms embedded-resource symfony
我想嵌入一个预先充电的非实体表单集合,这里是代码,首先是父表单buildForm方法.
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add("example1")->add("example2");
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
/*some logic to do before adding the collection of forms*/
$form->add('aclAccess', 'collection', array(
'type' => new ChildFormType(),
'allow_add' => true,
'mapped' => false,
'data' => /* I dont know how to precharge a collection of non-entity forms*/
));
});
}
Run Code Online (Sandbox Code Playgroud)
现在的孩子形式
public function buildForm (FormBuilderInterface $builder, array $options) {
$builder->add("test1", "text", array("read_only" => true, "data" => "test"));
$builder->->add("test2", "choice", array(
'choices' => array('opt1' => 'Opt1', 'opt2' => 'Opt2'),
'multiple' => true,
'expanded' => true
));
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我想在test2字段中管理那些子选项作为单独的表单,每个选项组将取决于test1字段的值,我知道这可以通过在没有表单类的twig编码everythin来完成,但我认为有表单类它是运行phpunit测试,可维护性等的最佳实践......
Pet*_*ley 14
根据使用没有类的表单的文档,绑定数据只是一个数组.
如果您不执行其中任何一项,则表单将以数组形式返回数据.在此示例中,由于
$defaultData不是对象(并且未data_class设置任何选项),因此$form->getData()最终返回一个数组.
并且为了澄清您可能对表单数据的任何误解 - 表单类型的基础对象/类不必是实体 - 您可以使用具有公共属性的任何类或映射到表单字段的getter/setter.就此而言,实体类本身并不特别 - 它们只有一堆映射信息告诉ORM如何持久化它们.
但是,回到你原来的问题,我不知道你的ChildFormType是什么样子,但是让我们假设它有两个字段,sequence以及title
$form->add('aclAccess', 'collection', array(
'type' => new ChildFormType(),
'allow_add' => true,
'mapped' => false,
'data' => array(
array('sequence' => 1, 'title' => 'Foo')
, array('sequence' => 2, 'title' => 'Bar')
)
));
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题
| 归档时间: |
|
| 查看次数: |
4312 次 |
| 最近记录: |