创建一个注册表单
某些形式有多余的字段的值不需要存储在数据库中。在这个例子中,我们将创建一个注册表单字段(条款接受复选框字段)和嵌入的形式存储帐户信息。我们将使用MongoDB来存储数据。
用户模型
我们开始本教程的模型用户
文档:
- PHP
1 / / src /文档/ User.php名称空间应用程序\文档;使用学说\包\MongoDBBundle\验证器\约束\独特的作为MongoDBUnique;使用学说\ODM\MongoDB\映射\注释作为MongoDB;使用ob娱乐下载\组件\验证器\约束作为断言;/ * * *@MongoDB收集\文档(= "用户")*@MongoDB\独特(字段= "电子邮件")* /类用户{/ * * *@MongoDB\ Id * /受保护的$ id;/ * * *@MongoDB\ (type = "字符串")*@Assert* \ NotBlank ()@Assert\电子邮件()* /受保护的美元的电子邮件;/ * * *@MongoDB\ (type = "字符串")*@Assert\ NotBlank () * /受保护的美元的密码;公共函数getId(){返回这个美元- > id;}公共函数getEmail(){返回这个美元- >电子邮件;}公共函数setEmail(电子邮件){这个美元- >电子邮件= $电子邮件;}公共函数getPassword(){返回这个美元- >密码;}/ /愚蠢的简单加密(请不要复制!)公共函数向setPassword(密码){这个美元- >密码= sha1(密码);}} 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. 31日 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 - PHP
1 / / src /文档/ User.php名称空间应用程序\文档;使用学说\包\MongoDBBundle\验证器\约束\独特的作为MongoDBUnique;使用学说\ODM\MongoDB\映射\注释作为MongoDB;使用ob娱乐下载\组件\验证器\约束作为断言;# [MongoDB \文档(收藏:用户的))# [MongoDB \独特(字段:“电子邮件”)]类用户{/ * * *@MongoDB\ Id * /# (MongoDB \ Id)受保护的字符串$ id;# [MongoDB \字段(类型:'字符串'))#(断言\ NotBlank)#[维护邮件\]受保护的字符串$邮件=零;# [MongoDB \字段(类型:'字符串'))#(断言\ NotBlank)受保护的密码=美元?字符串零;公共函数getId():字符串{返回这个美元- > id;}公共函数getEmail():哦?字符串{返回这个美元- >电子邮件;}公共函数setEmail(?字符串$电子邮件):无效{这个美元- >电子邮件= $电子邮件;}公共函数getPassword():哦?字符串{返回这个美元- >密码;}/ /愚蠢的简单加密(请不要复制!)公共函数向setPassword(?字符串$密码):无效{这个美元- >密码= sha1(密码);}} 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. 31日 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
这用户
文档包含三个字段,其中两个(电子邮件和密码)应该显示在表单中。电子邮件属性数据库中必须是唯一的,我们已经添加了这个验证类的顶部。
如果你想把这个用户在安全系统中,需要实现 |
创建一个表单的模式
接下来,创建的形式用户
模型:
1
/ / src /形式/类型/ UserType.php名称空间应用程序\形式\类型;使用应用程序\文档\用户;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;使用ob娱乐下载\组件\形式\扩展\核心\类型\PasswordType;使用ob娱乐下载\组件\形式\扩展\核心\类型\RepeatedType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;类UserType扩展AbstractType{公共函数buildForm(FormBuilderInterface builder美元,数组$选项){$建设者- > add (“电子邮件”EmailType::类);构建器- >添加(美元“密码”RepeatedType::类,“first_name”= >“密码”,“second_name”= >“确认”,“类型”= > PasswordType::类);}公共函数configureOptions(OptionsResolver解析器美元){$解析器- > setDefaults ([“data_class”= >用户::类);}}
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.
我们增加了两个字段:电子邮件和密码(重复确认输入密码)。的data_class
选项告诉表单类的名称,底层数据(即你的用户
文档)。
探索更多的事情关于表单组件,读它欧宝官网下载app。 |
嵌入用户形成一个注册表单
注册页面的表单,您将使用不一样的形式用于修改用户
(即。UserType
)。注册表将包含进一步接受条款,其价值不会存储在数据库中。
换句话说,创建第二个表格登记,嵌入用户
表单并添加额外的字段需要:
1
/ / src /形式/模型/ Registration.php名称空间应用程序\形式\模型;使用应用程序\文档\用户;使用ob娱乐下载\组件\验证器\约束作为断言;类登记{/ * * *@Assert\类型(Type = "应用程序文档\ \用户”)* /受保护的$用户;/ * * *@Assert* \ NotBlank ()@Assert\ IsTrue () * /受保护的termsAccepted美元;公共函数setUser(用户$ User){这个美元- >用户= $用户;}公共函数getUser(){返回这个美元- >用户;}公共函数getTermsAccepted(){返回这个美元- > termsAccepted;}公共函数setTermsAccepted(termsAccepted美元){这个美元- > termsAccepted = (bool) termsAccepted美元;}}
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.
31日
32
33
34
35
36
37
38
39
接下来,创建表单登记
模型:
1
/ / src /形式/类型/ RegistrationType.php名称空间应用程序\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\CheckboxType;使用ob娱乐下载\组件\形式\FormBuilderInterface;类RegistrationType扩展AbstractType{公共函数buildForm(FormBuilderInterface builder美元,数组$选项){$建设者- > add (“用户”UserType::类);构建器- >添加(美元“条款”CheckboxType::类,“property_path”= >“termsAccepted”]);}}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
你不需要使用任何特殊的嵌入方法UserType
的形式。一个表单是一个字段,您可以添加它像其他领域一样,与相应的期望用户
财产将类的实例UserType
。
处理表单提交
接下来,您需要一个控制器来处理表单。首先创建一个控制器显示注册表单:
1
/ / src /控制器/ AccountController.php名称空间应用程序\控制器;使用应用程序\形式\模型\登记;使用应用程序\形式\类型\RegistrationType;使用学说\ODM\MongoDB\DocumentManager;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\响应;类AccountController扩展AbstractController{公共函数获取registerAction(){$形式=这个美元- > createForm (RegistrationType::类,新登记());返回这个美元- >渲染(“帐户/ register.html.twig”,(“形式”= > $形式- > createView ()));}}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
和它的模板:
最后,创建另一个行动AccountController
,它将处理表单提交——执行验证并保存用户到MongoDB:
1
/ / src /控制器/ AccountController.php公共函数createAction美元(美元DocumentManager dm,请求请求){$形式=这个美元- > createForm (RegistrationType::类,新登记());美元$形式- > handleRequest(请求);如果($形式- > isSubmitted() & & $形式- > isValid()){$登记= $形式- > getData ();(dm - >坚持美元注册- > getUser ());$ dm - >冲洗();返回这个美元- >重定向(…);}返回这个美元- >渲染(“帐户/ register.html.twig”,(“形式”= > $形式- > createView ()));}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
就是这样!你现在的形式验证发送数据和允许您保存用户
MongoDB的对象。