Не обновляет сущность, если проверка не пройдена Symfony [форма] - PullRequest
2 голосов
/ 26 марта 2020

Использование Symfony 3.4 Я не хочу обновляться и получаю соответствующую ошибку, когда поле ввода не соответствует регулярному выражению.

вот мое поле телефона внутри сущности

     /**
     * @var string
     *
     * @ORM\Column(name="phone", type="string", length=20, unique=true, nullable=false)
     * @Assert\NotBlank(message="Phone is required.")
     * @Assert\Regex(
     *      pattern=Presenter::PHONE_REGEX,
     *      message="Not a valid phone number"
     * )
     */
    private $phone;

I Попытка отловить ошибку при установке $phone внутри setPhone($phone), как показано ниже

    /**
     * Set phone
     *
     * @param string $phone
     *
     * @return Worker
     */
    public function setPhone($phone)
    {
        if (preg_match(Presenter::PHONE_REGEX, $phone))
            $this->phone = $phone;
        return $this;
    }

И я получаю сообщение «Требуется телефон» вместо «Недействительный номер телефона» (поскольку телефон требуется в WorkerType).

Я искал в Google и нашел тему на github , но не получил конечного результата. Мне действительно нужна помощь о том, как правильно предотвратить обновление сущности и получить для него правильную ошибку.

1 Ответ

0 голосов
/ 30 марта 2020

Добавить 'mapped' => false параметр в поле WorkerType для телефона по событию PRE_SUBMIT.

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
      $phoneAttrs = [
          'mapped' => false,
          // add other attrs
      ];
      $event->getForm()->add('phone', TextType::class, phoneAttrs);
}

После отправки формы вызовите телефон вручную, если поле действительно:

if ($form->get('phone')->isValid() {
    $entity->setPhone($form->get('phone')->getData())
}
...