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

编辑该页面

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

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

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

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

但有时,您可能想要使用一种形式没有一个类,然后重新提交数据的数组。这实际上是很简单:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ /确保你进口上述请求的名称空间使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;/ /……公共函数contactAction(请求美元请求){美元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
使用欧宝娱乐app下载地址\组件\验证器\约束\长度;使用欧宝娱乐app下载地址\组件\验证器\约束\NotBlank;使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextType;美元构建器- >add (“firstName”,TextType::类,数组(“约束”= >长度(数组(“最小值”= >3))))- >add (“姓”,TextType::类,数组(“约束”= >数组(NotBlank (),长度(数组(“最小值”= >3)))));

提示

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

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

提示

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

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