OK、1つの制約ですべてを渡すことは機能しました。
これには、特定のプロパティへのバインドエラー、およびさまざまな障害に対するさまざまなメッセージのエラーが含まれます。
public function isValid($gift, Constraint $constraint)
{
// Validate product.
/** @var $product Product */
$product = $this->em->getRepository('DigitalApplicationBundle:Shop\Product')->findOneBy(array('name' => $gift->getProductName()));
if (!$product instanceof Product) {
$this->context->addViolationAtSubPath('username', $constraint->messageProduct, array('%string%' => $gift->getProductName()), null);
return false;
}
// Validate user.
/** @var $user User */
$user = $this->em->getRepository('DigitalUserBundle:User')->findOneBy(array('username' => $gift->getUsername()));
if (!$user instanceof User) {
$this->context->addViolationAtSubPath('username', $constraint->messageUser, array('%string%' => $gift->getUsername()), null);
return false;
}
// Gift correct type of the item!
if (($product->getType() != 0) && ($user->getGender() !== $product->getType())) {
$this->context->addViolationAtSubPath('username', $constraint->messageType, array('%string%' => $gift->getProductName()), null);
return false;
}
// If already owning this product.
foreach ($user->getWardrobe()->getProducts() as $wardrobeProduct) {
if ($product == $wardrobeProduct) {
$this->context->addViolationAtSubPath('username', $constraint->message, array('%string%' => $gift->getProductName(), '%user%' => $gift->getUsername()), null);
return false;
}
}
return true;
}