如何填写一份简单的注册表格

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.6,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何填写一份简单的注册表格

有些表单有额外的字段,其值不需要存储在数据库中。例如,您可能希望创建带有一些额外字段(如“terms accepted”复选框字段)的注册表单,并嵌入实际存储帐户信息的表单。

简单的用户模型

你有一个简单的用户映射到数据库的实体:

12 34 56 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 58 59
/ / src / Acme / / User.php AccountBundle /实体名称空间AcmeAccountBundle实体使用学说ORM映射作为ORM使用ob娱乐下载组件验证器约束作为断言使用ob娱乐下载学说验证器约束UniqueEntity/ * * *@ORM* \实体@UniqueEntity(fields="email", message=" email already taken") */用户/ * * *@ORM\ Id *@ORM\列(type =“整数”)*@ORM\ GeneratedValue(策略=“汽车”)* /受保护的id/ * * *@ORM\列(type="string", length=255) *@Assert* \ NotBlank ()@Assert\电子邮件()* /受保护的电子邮件/ * * *@ORM\列(type="string", length=255) *@Assert* \ NotBlank ()@Assert\长度(max = 4096) */受保护的plainPassword公共函数getId()返回->id;}公共函数getEmail()返回->电子邮件;}公共函数setEmail电子邮件->电子邮件=电子邮件;}公共函数getPlainPassword()返回->plainPassword;}公共函数setPlainPassword密码->plainPassword =密码;}}

用户实体包含三个字段,其中两个字段(电子邮件而且plainPassword)应在表格上显示。email属性在数据库中必须是唯一的,这是通过在类的顶部添加这个验证来实现的。

请注意

如果要将此User集成到安全系统中,需要实现用户界面的安全组件。

注意plainPassword字段的最大长度为4096个字符。为保安起见(cve - 2013 - 5750), ob娱乐下载Symfony在编码时限制普通密码的长度为4096个字符。添加此约束可以确保如果有人尝试使用超长密码,表单将给出验证错误。

你需要在应用程序中任何用户提交明文密码的地方添加这个约束(例如,更改密码形式)。惟一不需要担心这个问题的地方是登录表单,因为Symfony的Security组件为您处理了这个问题。ob娱乐下载

为模型创建一个表单

的表单用户模型:

12 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
/ / src / Acme / AccountBundle /形式/类型/ UserType.php名称空间AcmeAccountBundle形式类型使用ob娱乐下载组件形式AbstractType使用ob娱乐下载组件形式FormBuilderInterface使用ob娱乐下载组件OptionsResolverOptionsResolverInterfaceUserType扩展AbstractType公共函数buildForm(FormBuilderInterface构建器数组,选项构建器->add (“电子邮件”“电子邮件”);构建器->add (“plainPassword”“重复”数组“first_name”= >“密码”“second_name”= >“确认”“类型”= >“密码”));}公共函数setDefaultOptions(OptionsResolverInterface解析器解析器->setDefaults (数组“data_class”= >“Acme \ AccountBundle \实体\用户”));}公共函数getName()返回“用户”;}}

只有两个字段:电子邮件而且plainPassword(重复输入确认密码)。的data_class选项告诉表单底层数据类的名称(即您的用户实体)。

提示

要了解关于Form组件的更多内容,请阅读形式

将用户表单嵌入到注册表单中

用于注册页面的表单与用于简单修改用户(即。UserType).注册表单将包含更多的字段,如“接受条款”,其值不会存储在数据库中。

首先创建一个表示“注册”的简单类:

12 34 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
/ / src / Acme / AccountBundle /形式/模型/ Registration.php名称空间AcmeAccountBundle形式模型使用ob娱乐下载组件验证器约束作为断言使用AcmeAccountBundle实体用户登记/ * * *@AssertAcme \ AccountBundle \ \类型(Type = "实体\用户”)*@Assert\有效()* /受保护的用户/ * * *@Assert* \ NotBlank ()@Assert\ () * /受保护的termsAccepted公共函数setUser(用户用户->用户=用户;}公共函数getUser()返回->用户;}公共函数getTermsAccepted()返回->termsAccepted;}公共函数setTermsAcceptedtermsAccepted->termsAccepted = (bool)termsAccepted;}}

接下来,为此创建表单登记模型:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src / Acme / AccountBundle /形式/类型/ RegistrationType.php名称空间AcmeAccountBundle形式类型使用ob娱乐下载组件形式AbstractType使用ob娱乐下载组件形式FormBuilderInterfaceRegistrationType扩展AbstractType公共函数buildForm(FormBuilderInterface构建器数组,选项构建器->add (“用户”UserType ());构建器->add (“条款”“复选框”数组“property_path”= >“termsAccepted”));构建器->add (“注册”“提交”);}公共函数getName()返回“注册”;}}

对象的嵌入不需要使用特殊的方法UserType的形式。表单也是一个字段—因此您可以像添加其他字段一样添加这个字段Registration.user属性的实例用户类。

处理提交表格

接下来,您需要一个控制器来处理表单。首先创建一个简单的控制器来显示注册表单:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src / Acme / AccountBundle /控制器/ AccountController.php名称空间AcmeAccountBundle控制器使用ob娱乐下载FrameworkBundle控制器控制器使用AcmeAccountBundle形式类型RegistrationType使用AcmeAccountBundle形式模型登记AccountController扩展控制器公共函数获取registerAction()登记注册();形式->createForm (RegistrationType (),登记数组“行动”= >->generateUrl (“account_create”)));返回->呈现(“AcmeAccountBundle:账户:register.html.twig”数组“形式”= >形式->createView ()));}}

及其模板:

1 2
{# src / Acme / AccountBundle /资源/视图/账户/ register.html。树枝#}{{form(form)}}

接下来,创建处理表单提交的控制器。执行验证并将数据保存到数据库中:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用ob娱乐下载组件HttpFoundation请求/ /……公共函数createAction(请求请求新兴市场->getDoctrine ()->getManager ();形式->createForm (RegistrationType (),登记());形式->handleRequest (请求);如果形式->isValid ()) {登记形式->getData ();新兴市场->persist (登记->getUser ());新兴市场->冲洗();返回->redirectToRoute(…);}返回->呈现(“AcmeAccountBundle:账户:register.html.twig”数组“形式”= >形式->createView ()));}

添加新路由

接下来,更新你的路线。如果您将路由放在包中(如图所示),不要忘记确保路由文件正在被保存进口

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
# src / Acme / AccountBundle /资源/ config / routing.ymlaccount_register:路径:/注册默认值:_controller:AcmeAccountBundle:帐号:注册account_create:路径:/ /注册创建默认值:_controller:AcmeAccountBundle:账户:创建

更新数据库架构

当然,既然你加了一个用户实体,请确保您的数据库模式已正确更新:

1
$ PHP应用程序/控制台原则:schema:update——force

就是这样!您的表单现在验证,并允许您保存用户对象添加到数据库。额外的条款上的复选框。登记model类在验证期间使用,但在将User保存到数据库时并不实际使用。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。