Команда make:registration-form
Команда make:registration-form создаёт полноценный
механизм регистрации нового пользователя в приложении Symfony.
Команда генерирует класс формы, контроллер с логикой обработки
данных и Twig-шаблон для отображения. Первым параметром
передаётся имя класса формы, которое также используется для
именования контроллера и шаблона.
Синтаксис
php bin/console make:registration-form
Пример
Давайте запустим команду без параметров, чтобы мастер задал все вопросы в интерактивном режиме:
php bin/console make:registration-form
В процессе выполнения команда задаст несколько вопросов. Первый вопрос - имя класса формы:
What class name would you like to use for your registration form [RegistrationFormType]:
> RegistrationFormType
Далее команда спросит, нужно ли добавлять поле для ввода пароля и поле для подтверждения пароля:
Do you want to add a password field to your form? (yes/no) [yes]:
> yes
Do you want to add a password confirmation field? (yes/no) [yes]:
> yes
Затем команда уточнит, нужно ли автоматически аутентифицировать пользователя после регистрации:
Do you want to automatically authenticate the user after registration? (yes/no) [yes]:
> yes
После этого будут сгенерированы файлы формы, контроллера и шаблона. Команда выведет список созданных файлов:
created: src/Form/RegistrationFormType.php
created: src/Controller/RegistrationController.php
created: templates/registration/register.html.twig
Success!
Пример
Давайте посмотрим на сгенерированный класс формы
RegistrationFormType:
<?php
namespace AppForm;
use AppEntityUser;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeEmailType;
use SymfonyComponentFormExtensionCoreTypePasswordType;
use SymfonyComponentFormExtensionCoreTypeRepeatedType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsNotBlank;
use SymfonyComponentValidatorConstraintsLength;
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email', EmailType::class, [
'constraints' => [
new NotBlank([
'message' => 'Please enter an email',
]),
],
])
->add('plainPassword', RepeatedType::class, [
'type' => PasswordType::class,
'first_options' => [
'label' => 'Password',
],
'second_options' => [
'label' => 'Confirm Password',
],
'invalid_message' => 'The password fields must match.',
'constraints' => [
new NotBlank([
'message' => 'Please enter a password',
]),
new Length([
'min' => 6,
'minMessage' => 'Your password should be at least {{ limit }} characters',
'max' => 4096,
]),
],
])
->add('agreeTerms', CheckboxType::class, [
'mapped' => false,
'constraints' => [
new IsTrue([
'message' => 'You should agree to our terms.',
]),
],
])
->add('save', SubmitType::class, [
'label' => 'Register',
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
?>
Пример
Давайте рассмотрим сгенерированный контроллер
RegistrationController:
<?php
namespace AppController;
use AppEntityUser;
use AppFormRegistrationFormType;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentPasswordHasherUserPasswordHasherInterface;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentSecurityHttpAuthenticationLoginFormLoginFormAuthenticator;
use SymfonyComponentSecurityHttpAuthenticationUserAuthenticatorInterface;
class RegistrationController extends AbstractController
{
#[Route('/register', name: 'app_register')]
public function register(
Request $request,
UserPasswordHasherInterface $userPasswordHasher,
EntityManagerInterface $entityManager,
UserAuthenticatorInterface $userAuthenticator,
LoginFormAuthenticator $authenticator
): Response {
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$entityManager->persist($user);
$entityManager->flush();
$userAuthenticator->authenticateUser(
$user,
$authenticator,
$request
);
return $this->redirectToRoute('app_home');
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form,
]);
}
}
?>
Пример
Давайте рассмотрим сгенерированный Twig-шаблон
register.html.twig:
{% extends 'base.html.twig' %}
{% block title %}Register{% endblock %}
{% block body %}
<h1>Register</h1>
{{ form_errors(registrationForm) }}
{{ form_start(registrationForm) }}
{{ form_row(registrationForm.email) }}
{{ form_row(registrationForm.plainPassword, {
label: 'Password'
}) }}
{{ form_row(registrationForm.agreeTerms) }}
<button type="submit" class="btn">Register</button>
{{ form_end(registrationForm) }}
{% endblock %}
Смотрите также
-
команда
make:user,
которая создаёт класс пользователя -
команда
make:auth,
которая генерирует систему аутентификации -
команда
make:reset-password,
которая создаёт форму сброса пароля -
команда
make:form,
которая генерирует класс формы