У меня есть такой объект DTO
class SaveManagedOfferCreativesCommand
{
/**
* @var int
*
* @Assert\NotNull()
* @Assert\Type(type="int")
*/
public $id;
/**
* @var EmbeddedCreative
*
* @Assert\Valid(groups={"defaultCreative"})
*/
public $defaultCreative;
/**
* @var EmbeddedCreative[]
*
* @Assert\Valid(groups={"creativeTranslations"})
*/
public $creatives = [];
public function setCreative(EmbeddedCreative $offerOfferWallCreative): void
{
$this->defaultCreative = $offerOfferWallCreative;
}
public function addOCreative(EmbeddedCreative $offerOfferWallCreative): void
{
$this->creatives[] = $offerOfferWallCreative;
}
}
и класс EmbeddedCreative:
class EmbeddedCreative
{
/**
* @var string
*
* @Assert\NotNull(groups={"creativeTranslations", "defaultCreative"})
* @Assert\Type(type="string", groups={"creativeTranslations", "defaultCreative"})
*/
public $anchor;
/**
* @var string
*
* @Assert\NotNull(groups={"creativeTranslations"})
* @Assert\IsNull(groups={"defaultCreative"})
* @Assert\Type(type="string", groups={"creativeTranslations", "defaultCreative"})
* @Assert\Length(max=2, groups={"creativeTranslations", "defaultCreative"})
*/
public $language;
}
Ожидаемое поведение таково:
- для $ defaultCreative$ language должен быть всегда нулевым, чтобы пройти валидацию
- для $ creatives $ language не должен быть нулевым, чтобы пройти валидацию.
Зависит от этой статьи https://symfony.com/blog/new-in-symfony-3-4-groups-support-for-the-valid-constraint мы можемсделайте это с группами, начиная с symfony 3.4, но с группами (код, который я предоставил выше) symfony вообще не будет проверять встраиваемый класс и проходить валидацию с любыми данными, но когда я удаляю группы, он также не будет проверяться должным образом (он допускает нуль или не ноль $language
зависит от того, какое ограничение установлено в встраиваемом классе).
Я считаю, что проверка с группами должна работать, и я делаю что-то не так.Может ли кто-нибудь мне помочь, предоставляя хороший способ сделать ожидаемую проверку?