本文概述
- 1.创建RegistrationFormType
- 2.创建RegistrationController
- 3.在Twig中创建注册视图
- 4.测试表单
1.创建RegistrationFormType 第一步, 将使用Symfony Fomrs组件创建表单。在应用程序的/ app / src / Form /目录中创建具有以下内容的新表单类型, 即RegistrationFormType:
<
?php// app/src/Form/RegistrationFormType.php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\IsTrue;
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->
add('firstName')
->
add('lastName')
->
add('email')
->
add('plainPassword', RepeatedType::class, [
'type' =>
PasswordType::class, 'invalid_message' =>
'The password fields must match.', 'required' =>
true, 'first_options'=>
['label' =>
'Password'], 'second_options' =>
['label' =>
'Repeat Password'], // instead of being set onto the object directly, // this is read and encoded in the controller
'mapped' =>
false, 'constraints' =>
[
new NotBlank([
'message' =>
'Please enter a password', ]), new Length([
'min' =>
6, 'minMessage' =>
'Your password should be at least {{ limit }} characters', // max length allowed by Symfony for security reasons
'max' =>
4096, ]), ], ])
->
add('agreeTerms', CheckboxType::class, [
'mapped' =>
false, 'constraints' =>
[
new IsTrue([
'message' =>
'You should agree to our terms.', ]), ], ])
;
}public function configureOptions(OptionsResolver $resolver)
{
$resolver->
setDefaults([
'data_class' =>
User::class, ]);
}
}
在该类的configureOptions方法中, 我们将把User类(在系列的第一部分中创建)绑定为表单的data_class。该表格将有5个字段, 其中4个字段要求用户提供注册新用户的基本信息, 名字和姓氏, 电子邮件和密码。
2.创建RegistrationController 几秒钟之后, 我们将必须安排一些通往用户的路由, 以便用户可以自己注册。我们将公开一个专门用于注册的控制器, 该控制器可在mywebsite.com/register上找到。在此控制器中, 我们将执行一个操作, 该操作将呈现注册视图, 并且还将通过条件(如果条件表已提交)来处理注册用户所需的信息。 register方法将通过依赖注入接收UserPasswordEncoderInterface, 该接口将用于编码通过以下形式发送的纯文本密码:
<
?php// app/src/Controller/RegistrationController.php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class RegistrationController extends AbstractController
{
/**
* @Route("/register", name="app_register")
*/
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response
{
$user = new User();
$form = $this->
createForm(RegistrationFormType::class, $user);
$form->
handleRequest($request);
if ($form->
isSubmitted() &
&
$form->
isValid()) {
// encode the plain password
$user->
setPassword(
$passwordEncoder->
encodePassword(
$user, $form->
get('plainPassword')->
getData()
)
);
$entityManager = $this->
getDoctrine()->
getManager();
$entityManager->
persist($user);
$entityManager->
flush();
// do anything else you need here, like send an email
// in this example, we are just redirecting to the homepage
return $this->
redirectToRoute('app_index');
}return $this->
render('registration/register.html.twig', [
'registrationForm' =>
$form->
createView(), ]);
}
}
该动作将使用表单呈现Twig视图, 并且在提交表单时将发生上述逻辑。
3.在Twig中创建注册视图 最后, 我们只需要在控制器上创建作为响应发送的视图。在/ app / templates / registration /目录(即register.html.twig)中创建的该视图将具有以下内容:
{# /app/templates/registration/register.html.twig #}
{% extends 'base.html.twig' %}{% block title %}Register{% endblock %}{% block body %}
<
h1>
Register<
/h1>
{# If there are any errors on the form, display them #}
{% set formErrors = registrationForm.vars.errors.form.getErrors(true) %}
{% if formErrors|length %}
<
div class="alert alert-danger">
<
ul>
{% for error in formErrors %}
<
li>
{{ error.message }}<
/li>
{% endfor %}
<
/ul>
<
/div>
{% endif %}{# Render the Form #}
{{ form_start(registrationForm) }}
{{ form_row(registrationForm.firstName) }}
{{ form_row(registrationForm.lastName) }}
{{ form_row(registrationForm.email) }}
{{ form_row(registrationForm.plainPassword) }}
{{ form_row(registrationForm.agreeTerms) }}<
button class="btn">
Register<
/button>
{{ form_end(registrationForm) }}
{% endblock %}
最初, 我们将检查表单上是否存储了任何错误, 以便用户知道给定的信息是否足以注册自己。然后, 我们将使用form_start, form_row和form_end标记手动呈现表单。
4.测试表单 最后, 你可以在网站上测试注册路线并填写以下表格:
文章图片
用户将能够轻松注册自己。
阅读教程的所有部分” 如何在SYMFONY 4.3中实施你自己的用户认证系统”
- 第1部分:创建自定义用户类。
- 第2部分:创建用户注册表单。
- 第3部分:创建登录表单和注销路径。
- https://symfony.com/doc/4.0/doctrine/registration_form.html
推荐阅读
- 如何在Ubuntu 18.04中使用Python从音频文件中提取旋律并将其导出到MIDI(生成量化的MIDI)
- 如何在Symfony 4.3中实现自己的用户身份验证系统(第3部分(创建登录表单和注销路径))
- Linux-HA 高可用开源方案 Keepalived VS Heartbeat 的选择
- hpwm.h头文件和hpwm.c文件,分别复制,保存成hpwm.h文件和hpwm.c文件,就能使用
- 实例4,循迹模块的使用和循迹小车的实现
- MYSQL中group_concat有长度限制!默认1024
- RHEL 6.3 as 64bit 配置yum源
- 实物2操作(stc8a8k按键使用)
- 安装MYSQL错误“conflicts with file from package mysql-libs-*” 解决方法