Symfony CreateFormBuilder игнорирует мою сущность @Assert \ Length - PullRequest
0 голосов
/ 23 января 2020

У меня есть сущность User, у которой есть $ пароль с @Assert \ Length (min = 6)

/**
* @var string The hashed password
* @ORM\Column(type="string")
* @Assert\Length( min=6, minMessage="Password is too short (min 6 symbols)" )
*/
private $password;

Я пытаюсь создать форму для входа в систему с помощью createFormBuilder

$LoginForm=$this->createFormBuilder(null,['data_class'=>User::class])
->add('email')
->add('password', ??? PasswordType::class ??? )
->getForm();

Если я не установил PasswordType :: class для моего второго поля (в createFormBuilder), он генерирует HTML с полем "type = 'text'". @Assert \ Lenth, кажется, работает нормально (pattern = 6, представляют)

<input type="text" id="form_password" name="form[password]" required="required" pattern=".{6,}">

Если я установлю 'PasswordType :: class', поле HTML станет "type = 'password'" , но он полностью забывает об ограничении minLength ...

<input type="password" id="form_password" name="form[password]" required="required">

Итак, на этом этапе мне приходится выбирать между текстовым полем (с шаблоном minLength) или паролем (который игнорирует мою сущность @Assert \ Length) = |

===

UPD: об установке ограничений непосредственно в 'add ()'

add('userName', TextType::class, ['constraints' => [new Length(['min' => 6])]])

генерирует пустой (ну, там никаких ограничений) HTML также:

<input type="text" id="form_userName" name="form[userName]" required="required">

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вы можете использовать эту альтернативу и проходную аннотацию

->add('password', PasswordType::class, [
     'constraints' => [
      new Length(['min' => 3]),
      ],
)
0 голосов
/ 23 января 2020

Видимость параметра шаблона не зависит от поля типа формы. Если опустить поле типа add method и предположить, что вы уже определили ограничения для сущности, то атрибуты ограничения будут доступны на стороне html.

/**
* @var string $userName
* @ORM\Column(type="string")
* @Assert\Length(min=6, minMessage="Username is too short (min 6 symbols)")
*/
private $userName;

Итак, если вы объявите свой тип формы следующим образом:

$LoginForm=$this->createFormBuilder(null,['data_class'=>User::class])
    ->add('email')
    ->add('username')
    ->getForm();

Тогда вы можете увидеть атрибут шаблона на входе. Но если вы добавите какое-либо поле FormType к ->add('username', TextType::class), атрибут pattern больше не будет доступен. Итак, чтобы добавить ограничение к вашей форме, добавьте ограничение непосредственно к типу формы.

  ->add('userName', TextType::class, [
            'constraints' => [
                new Length(['min' => 6]),
            ],
        ]);

Для получения дополнительной информации, пожалуйста, посмотрите Symfony do c.

...