如何嵌入形式

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.1,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何嵌入形式

通常,您会希望构建一种包括来自许多不同的对象的字段。例如,一个属于一个注册表单可能包含数据用户对象以及许多地址对象。幸运的是这可以通过表单组件。

嵌入一个对象

假设每个任务属于一个类别对象。首先创建的类别对象:

1 2 3 4 5 6 7 8 9 10 11 12
/ / src /实体/ Category.php名称空间应用程序\实体;使用ob娱乐下载\组件\验证器\约束作为断言;类别{/ * * *@Assert\ NotBlank * /公共美元的名字;}

接下来,添加一个新的类别财产任务类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ /……任务{/ /……/ * * *@Assert\ \类型(Type = " App \实体类别”)*@Assert有效\ * /受保护的美元类别;/ /……公共函数getCategory():哦?类别{返回美元- >类别;}公共函数setCategory(?类别美元类别){美元- >类别=美元类别;}}

提示

有效的约束添加到属性类别。这瀑布验证相应的实体。如果你忽略这个约束,孩子不会验证实体。

现在,您的应用程序已经更新以反映新的需求,创建一个类,这样一个形式类别对象由用户可以修改:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src /形式/ CategoryType.php名称空间应用程序\形式;使用应用程序\实体\类别;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;CategoryType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“名字”);}公共函数configureOptions(OptionsResolver美元解析器):无效{美元解析器- >setDefaults ([“data_class”= >类别::类,]);}}

最终目标是允许的类别任务在任务表单本身要修改的权利。为此,添加一个类别场的TaskType对象的类型的新实例CategoryType类:

1 2 3 4 5 6 7 8 9
使用应用程序\形式\CategoryType;使用ob娱乐下载\组件\形式\FormBuilderInterface;公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{/ /……美元构建器- >add (“类别”,CategoryType::类);}

的字段CategoryType现在可以一起呈现的TaskType类。

呈现类别字段一样原始任务字段:

1 2 3 4 5 6 7 8
{#……#}<h3>类别< /h3><div=“类别”>{{form_row (form.category.name)}}< /div>{#……#}

当用户提交表单时,提交的数据类别字段是用于构造的一个实例类别,然后套上类别场的任务实例。

类别自然通过实例访问$任务- > getCategory ()并且可以但是你需要持久化到数据库或使用。

嵌入形式的集合

你也可以嵌入形式的集合到一个表单(想象一个类别有很多形式产品体)。这是通过使用集合字段类型。

看到的更多信息如何嵌入一组形式和条CollectionType参考。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
< /article>