如何嵌入表单
编辑本页如何嵌入表单
通常,您会希望构建一个包含来自许多不同对象的字段的表单。例如,注册表单可以包含属于用户
对象以及许多地址
对象。幸运的是,这可以通过Form组件实现。
嵌入单个对象
假设每一个任务
属于类别
对象。首先创建类别
类:
1 2 3 4 5 6 7 8 9 10
/ / src /实体/ Category.php名称空间应用程序\实体;使用ob娱乐下载\组件\验证器\约束作为断言;类类别{#(断言\ NotBlank)公共$的名字;}
接下来,添加一个new类别
属性任务
类:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ /……类任务{/ /……#[断言\类型(类型:类别::类))#[断言有效\]受保护的$类别;/ /……公共函数getCategory():哦?类别{返回$这->类别;}公共函数setCategory(?类别$类别){$这->类别=$类别;}}
提示
的有效的
约束已添加到属性类别
.这将验证级联到相应的实体。如果省略此约束,则不会验证子实体。
现在您的应用程序已经被更新以反映新的需求,创建一个表单类以便a类别
对象可以被用户修改:
12 3 4 5 6 7 8 9 10 11 12 13 14 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
对象,其类型为new的实例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 ()
并且可以持久化到数据库中,或者根据需要任意使用。
嵌入一个表单集合
您还可以将一组表单嵌入到一个表单中(想象一个类别
Form with many产品
体)。这是通过使用集合
字段类型。
有关更多信息,请参阅如何嵌入一个集合的形式文章和CollectionType参考。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。