Форма редактирования игнорирует аннотации проверки - PullRequest
0 голосов
/ 30 ноября 2018

В простой пользовательской реализации администратора (Symfony 4.1.7, easyadmin 1.17.16) форма редактирования игнорирует аннотации проверки сущности, тогда как новая форма - нет.Например, если поле электронной почты в форме редактирования пусто при отправке формы, InvalidArgumentException генерируется с сообщением Expected argument of type "string", "NULL" given.Это исключение также генерируется, если аннотация проверки удаляется из сущности User.

То же поле, если пусто в новой форме, возвращает сообщение проверки Email address is required.

Свойства сущности пользователя (некоторыеполя не показаны):

/**
 * @ORM\Column(type="string", length=180, unique=true)
 * @Assert\NotBlank(groups={"edit", "registration"}, message="Email address is required")
 * @Assert\Email(groups={"edit", "registration"}, message="A valid email address is required")
 */
private $email;

/**
 * @ORM\Column(type="string", length=255)
 * @Assert\NotBlank(groups={"edit", "registration"}, message="First name is required")
 */
private $fname;

/**
 * @ORM\Column(type="string", length=255)
 * @Assert\NotBlank(groups={"edit", "registration"}, message="Last name is required")
 */
private $sname;

easy_admin.yaml (некоторые поля не показаны):

edit:
    form_options: { validation_groups: ['edit'] }
    fields:
        - {property: 'fname', label: 'First name', type_options: { required: false }}
        - {property: 'sname', label: 'Last name', type_options: { required: false }}
        - {property: 'email', type: 'email', type_options: { required: false }}
new:
    form_options: { validation_groups: ['registration'] }
    fields:
        - {property: 'fname', label: 'First name', type_options: { required: false }}
        - {property: 'sname', label: 'Last name', type_options: { required: false }}
        - {property: 'email', type: 'email', type_options: { required: false }}

1 Ответ

0 голосов
/ 30 ноября 2018

Это исключение аргумента.Попробуйте изменить аргумент setters, чтобы он принимал нулевой аргумент.Это должно сработать и вызовет обратный вызов проверки, например:

public function setEmail(string $email): self
{
    $this->email= $email;

    return $this;
}

На это:

public function setEmail(?string $email): self
{
    $this->email= $email;

    return $this;
}
...