创建一个注册表单

某些形式有多余的字段的值不需要存储在数据库中。在这个例子中,我们将创建一个注册表单字段(条款接受复选框字段)和嵌入的形式存储帐户信息。我们将使用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.

和它的模板:


           
1 {/账户/ register.html #模板。树枝#}{{form_start(形式,{“行动”:路径(“创建”),“法”:“POST”})}} {{form_widget(形式)}}<输入类型=“提交”/ >{{form_end(形式)}}
2
3
4
5
6

最后,创建另一个行动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的对象。