src/Account/Forms/PasswordFormType.php
<?php declare(strict_types=1);
namespace VSV\GVQ_API\Account\Forms;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Regex;
use VSV\GVQ_API\User\ValueObjects\Password;
class PasswordFormType extends AbstractType
{
/**
* @var TranslatorInterface
*/
protected $translator;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->translator = $options['translator'];
$builder
->add(
'password',
RepeatedType::class,
[
'type' => PasswordType::class,
'invalid_message' => $this->translator->trans('Field.passwords.different'),
'first_options' => [
'always_empty' => false,
'constraints' => [
new Regex(
[
'pattern' => Password::PATTERN,
'message' => $this->translator->trans('Field.password.pattern'),
]
),
new NotBlank(
[
'message' => $this->translator->trans('Field.empty'),
]
),
new Length(
[
'max' => 4096,
'maxMessage' => $this->translator->trans('Field.length.max'),
]
),
],
],
'second_options' => [
'always_empty' => false,
],
]
);
}
/**
* @inheritdoc
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
'translator' => null,
]
);
}
}