如何嵌入表单

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何嵌入表单

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

嵌入单个对象

假设每一个任务属于简单的类别对象。当然,首先要创建类别对象:

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

接下来,添加一个new类别属性任务类:

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

提示

有效的约束已添加到属性类别.这将验证级联到相应的实体。如果省略此约束,则不会验证子实体。

现在您的应用程序已经被更新以反映新的需求,创建一个表单类以便a类别对象可以被用户修改:

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

最终目标是允许类别任务在任务表单本身内部进行修改。要完成此操作,请添加类别字段到TaskType对象,其类型为new的实例CategoryType类:

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

田野从CategoryType现在可以和那些来自TaskType类。

呈现类别与原字段相同任务字段:

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

当用户提交表单时,提交的数据为类别字段用于构造的实例类别,然后设置在类别字段任务实例。

类别实例可以通过任务- > getCategory ()并且可以持久化到数据库中,或者根据需要任意使用。

嵌入一个表单集合

您还可以将一组表单嵌入到一个表单中(想象一个类别Form with many产品体)。这是通过使用集合字段类型。

有关更多信息,请参阅如何嵌入一个集合的形式文章和CollectionType参考。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。