Запустить проверку валидации NotBlank на другом поле - PullRequest
0 голосов
/ 17 июня 2019

У меня есть форма Symfony, где мне нужно стрелять @Assert\NotBlank, только если $receiverNewsletter, если не пусто.

/**
 * @var string
 *
 * @Assert\NotBlank
 * @Assert\Email
 *
 * @ORM\Column(name="email", type="string", length=190)
 */
private $email;


/**
 * @var bool
 *
 * @ORM\Column(name="receiveNewsletter", type="boolean")
 */
private $receiveNewsletter;

Часть моей формы:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('receiveNewsletter', CheckboxType::class, ['label' => 'form.label.receiveNewsletter'])
            ->add('email', EmailType::class, ['label' => 'form.label.email', 'required' => false])
}

Есть идеи, как использовать полезную нагрузку, чтобы сказать, что если receiveNewsletter не равен NULL, а затем запустить проверку NotBlank в поле электронной почты?

1 Ответ

2 голосов
/ 17 июня 2019

Вы можете использовать ограничение Expression для этой конкретной функции.Он не использует NotBlank специально, но я считаю его более элегантным решением.

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Assert\Expression(
 *     "(this.getReceiveNewsletter() and this.getEmail()) or !this.getReceiveNewsletter()",
 *     message="Email cannot be empty when Receive Newsletter is marked"
 * )
 */
class Entity
{
...
}

Вы накладываете ограничение на всю сущность, и оно вычисляет выражение в соответствии с синтаксисом выражения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...