没有一个数据类如何使用一种形式
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载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名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……类ContactController扩展AbstractController{公共函数联系(请求美元请求):响应{美元defaultData= (“消息”= >这里输入您的消息的];美元形式=美元这- >createFormBuilder (美元defaultData)- >add (“名字”,TextType::类)- >add (“电子邮件”,EmailType::类)- >add (“消息”,TextareaType::类)- >add (“发送”,SubmitType::类)- >getForm ();美元形式- >handleRequest (美元请求);如果(美元形式- >isSubmitted () & &美元形式- >isValid ()) {/ /数据数组与“名称”、“电子邮件”,“信息”键美元数据=美元形式- >getData ();}/ /……呈现形式}}
默认情况下,一种形式实际上假设您希望使用数组的数据,而不是一个对象。确切地说,有两种方法可以改变这一行为和领带表单对象而不是:
- 通过一个对象在创建表单(第一个参数
createFormBuilder ()
或第二个参数createForm ()
); - 声明
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
使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\验证器\约束\长度;使用ob娱乐下载\组件\验证器\约束\NotBlank;公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“firstName”,TextType::类,“约束”= >新长度([“最小值”= >3))))- >add (“姓”,TextType::类,“约束”= > [新NotBlank (),新长度([“最小值”= >3)))));}
提示
如果您使用的是验证组,需要引用默认的
集团在创建表单时,或一组正确的小组所添加的约束:
1
新NotBlank ([“组织”= > [“创建”,“更新”]]);
提示
如果表格没有映射到一个对象,每个对象在你提交的数据验证使用的数组ob娱乐下载
约束,除非你禁用验证。
谨慎
当一个表单只是部分提交补丁(例如,在一个HTTP请求),只提交表单字段的约束将被评估。