如何使用没有数据类的表单

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何使用没有数据类的表单

在大多数情况下,表单被绑定到一个对象,表单的字段在该对象的属性上获取并存储它们的数据。这正是到目前为止你在本章中看到的“Task”类。

但有时,您可能只是想使用没有类的表单,并返回提交数据的数组。这其实很简单:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
//确保你已经在类上面导入了Request命名空间使用欧宝娱乐app下载地址组件HttpFoundation请求/ /……公共函数contactAction(请求请求defaultData数组“消息”= >“在这里输入您的信息”);形式->createFormBuilder (defaultData->add (“名字”, TextType::类)->add (“电子邮件”, EmailType::类)->add (“消息”, TextareaType::类)->add (“发送”, SubmitType::类)->getForm ();形式->handleRequest (请求);如果形式->isValid ()) {// data是一个包含"name", "email"和"message"键的数组数据形式->getData ();}/ /……渲染表单

默认情况下,表单实际上假定您要处理数据数组,而不是对象。有两种方法可以改变这种行为并将表单绑定到对象上:

  1. 在创建表单时传递一个对象(作为createFormBuilder或者第二个参数createForm);
  2. 声明data_class表格上的选项。

如果你执行其中任何一项操作,表单都将以数组的形式返回数据。在这个例子中,sincedefaultData美元不是一个对象(而且不是data_class选项已设置),形式- > getData ()最终返回一个数组。

提示

你也可以直接通过请求对象访问POST值(在本例中是“name”),如下所示:

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

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

添加验证

唯一缺少的部分是验证。通常是你打电话的时候美元形式- > isValid (),通过读取应用到该类的约束来验证对象。如果您的表单映射到一个对象(即您正在使用data_class选项或向表单传递对象),这几乎总是您想要使用的方法。看到验证欲知详情。

但是,如果表单没有映射到对象,而希望检索提交数据的简单数组,那么如何向表单数据添加约束呢?

答案是自己设置约束,并将它们附加到各个字段。方法中详细介绍了总体方法验证章,但这里有一个简短的例子:

12 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 (数组“组织”= >数组“创建”“更新”))
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。