没有一个数据类如何使用一种形式

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.4,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

没有一个数据类如何使用一种形式

在大多数情况下,一种形式是与一个对象,表单的字段获取和存储数据的属性对象。这正是本文到目前为止你看过的任务类。

但有时,你可能想要使用一种形式没有一个类,然后重新提交数据的数组。的getData ()方法允许你这样做:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30
/ / src /控制器/ ContactController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;/ /……ContactController扩展AbstractController{公共函数联系(请求美元请求):响应{美元defaultData= (“消息”= >这里输入您的消息的];美元形式=美元- >createFormBuilder (美元defaultData)- >add (“名字”,TextType::类)- >add (“电子邮件”,EmailType::类)- >add (“消息”,TextareaType::类)- >add (“发送”,SubmitType::类)- >getForm ();美元形式- >handleRequest (美元请求);如果(美元形式- >isSubmitted () & &美元形式- >isValid ()) {/ /数据数组与“名称”、“电子邮件”,“信息”键美元数据=美元形式- >getData ();}/ /……呈现形式}}

默认情况下,一种形式实际上假设您希望使用数组的数据,而不是一个对象。确切地说,有两种方法可以改变这一行为和领带表单对象而不是:

  1. 通过一个对象在创建表单(第一个参数createFormBuilder ()或第二个参数createForm ());
  2. 声明data_class选择表单。

如果你做这两种,那么将返回一个数组的数据形式。在这个例子中,defaultData美元不是一个对象(和没有data_class选项设置),$形式- > getData ()最终返回一个数组。

提示

您还可以访问后值(在本例中“名字”)直接通过请求对象,如下所示:

1
美元请求- >请求- >get (“名字”);

建议,然而,在大多数情况下使用getData ()方法是一种更好的选择,因为它返回后的数据(通常是一个对象)转换的表单组件。

添加验证

唯一缺少的功能验证。通常,当你调用美元$形式- > handleRequest(请求),对象是验证通过阅读的约束应用于该类。如果表单映射到一个对象(即你使用data_class选择表单或传递一个对象),这是几乎总是你想要使用的方法。看到验证为更多的细节。

但如果表单不是映射到一个对象,你不是想要检索数组你提交的资料,如何约束添加到表单的数据吗?

答案是建立约束自己,并附上个人领域。整个方法覆盖更多本文验证,但是这里有一个简单的例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextType;使用欧宝娱乐app下载地址\组件\形式\FormBuilderInterface;使用欧宝娱乐app下载地址\组件\验证器\约束\长度;使用欧宝娱乐app下载地址\组件\验证器\约束\NotBlank;公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“firstName”,TextType::类,“约束”= >长度([“最小值”= >3))))- >add (“姓”,TextType::类,“约束”= > [NotBlank (),长度([“最小值”= >3)))));}

提示

如果您使用的是验证组,需要引用默认的集团在创建表单时,或一组正确的小组所添加的约束:

1
NotBlank ([“组织”= > [“创建”,“更新”]]);

提示

如果表格没有映射到一个对象,每个对象在你提交的数据验证使用的数组欧宝娱乐app下载地址\组件\验证器\约束\有效约束,除非你禁用验证

谨慎

当一个表单只是部分提交补丁(例如,在一个HTTP请求),只提交表单字段的约束将被评估。

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