我有一个表格来创建一个新的实体。 该实体,但其宣传形式也进入了其他实体的集合。
我想用实体的验证选项集合中来验证这些实体,但它不工作。 “主”实体(人)的验证规则进行检查,但在实体的验证规则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;
...
}
我怎样才能获取表单验证所提供的地址实体?
我有同样的问题,但解决了:
/**
* @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;
你也可以使用“ 有效 ”约束的“ 全 ”的约束:
/**
* @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
* @Assert\All({
* @Assert\Valid
* })
*/
protected $addressList;