Ответ 1
У меня была такая же проблема, но она была решена с помощью:
/**
* @ORM\OneToMany(
* targetEntity="Entity",
* mappedBy="mappedEntity",
* cascade={"persist" , "remove"}
* )
* @Assert\Valid
*/
У меня есть форма для создания нового объекта. Этот объект имеет коллекцию других объектов, которые также введены в эту форму.
Я хочу использовать параметры проверки сущности в коллекции для проверки этих объектов, но она не работает. Проверяются правила проверки "основного" объекта (Person), но правила проверки сущностей в коллекции addressList
(Адрес) не проверяются. Когда я ввожу недопустимую информацию в полях, представленная форма успешно проверяется.
В этом примере аннотация для улицы не используется при проверке.
class Person
{
...
/**
* @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
*/
protected $addressList;
....
}
class Address
{
...
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="addressList")
* @ORM\JoinColumn(name="person_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $owner;
/**
* @ORM\Column(type="string", length=75)
* @Assert\MinLength(
* limit=3,
* message="Street must have atleast {{ limit }} characters."
* )
*/
protected $street;
...
}
Как я могу получить форму для проверки входящих объектов Address?
У меня была такая же проблема, но она была решена с помощью:
/**
* @ORM\OneToMany(
* targetEntity="Entity",
* mappedBy="mappedEntity",
* cascade={"persist" , "remove"}
* )
* @Assert\Valid
*/
Я использую это:
use Symfony\Component\Validator\ExecutionContextInterface;
class Person
{
...
/**
* @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
*/
protected $addressList;
....
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context)
{
if (!$this->getAddressList()->count()) {
$context->addViolationAt(
'addressList',
'You must add at least one address',
array(),
null
);
}
}
}
http://symfony.com/doc/current/reference/constraints/Callback.html
Просто добавьте аннотацию, как показано ниже
/**
* @Assert\Count(
* min = "1",
* minMessage = "You must specify at least one"
* )
* @Assert\Valid
*
*/
protected $name_of_collection_property;
Вы также можете использовать ограничение Valid с помощью All ":
/**
* @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
* @Assert\All({
* @Assert\Valid
* })
*/
protected $addressList;