Symfony. Как сделать валидацию полей формы с зависимостью от значений других полей?
Всем доброго времени суток! Столкнулся с такой проблемой, что надо сделать валидацию формы сущности Post с определенной бизнес логикой.
Что есть:
- форма для редактирования св-в Post (публикация) которую может редактировать пользователь
- валидация сущности Post через аннотации
- у сущности Post есть признак публикации (published) и дата публикации (publishedAt)
- дата публикации обязательна и должна быть больше или равно текущий дате, если выставлен признак публикации
- если признак публикации снят, то дату публикации никак не валидируем
Вопрос! Можно ли как то сделать такую валидацию без написания собственного валидатора поля "дата публикации"?
class Post
{
/**
* @Assert\NotNull
*/
public bool $published;
/**
* Как написать правила валидации для этого св-ва?
* @Assert\DateTime
*/
public \DateTime $publishedAt;
}
Ответы (1 шт):
Автор решения: Denis Startsev
→ Ссылка
Можно через callback
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Constraints as Assert;
class Post
{
...
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if ($this->published)
{
if (!$this->publishedAt || $this->publishedAt < (new \Datetime()))
{
$context->buildViolation('Сообщение о ошибке')
->atPath('publishedAt ')
->addViolation();
}
}
}
...