我想創建驗證3個對象屬性組合的驗證器。Symfony2:如何編寫一次驗證3個不同屬性組合的自定義驗證器?
我需要檢查包的大小,所以我必須總結width
,height
和length
。
我無法訪問height
& length
如果我將驗證器映射到width
字段。
是否有可能使用整個表單的自定義驗證器?
我想創建驗證3個對象屬性組合的驗證器。Symfony2:如何編寫一次驗證3個不同屬性組合的自定義驗證器?
我需要檢查包的大小,所以我必須總結width
,height
和length
。
我無法訪問height
& length
如果我將驗證器映射到width
字段。
是否有可能使用整個表單的自定義驗證器?
您可以創建一個類約束驗證,as per documentation,如:
class ProtocolClassValidator extends ConstraintValidator
{
public function validate($protocol, Constraint $constraint)
{
if ($protocol->getFoo() != $protocol->getBar()) {
$this->context->addViolationAt(
'foo',
$constraint->message,
array(),
null
);
}
}
}
您可以定義一個類級別的定製約束有點像這個實現自己的目標:
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class PackageSizeValidator extends ConstraintValidator
{
public function validate($object, Constraint $constraint)
{
$packageSize = $object->getWidth() * $object->getHeight() * $object->getLength();
if ($packageSize <= 30) {
return;
}
$this->context->addViolationAt(
'length',
'Package size exceeds 30.',
array(),
null
);
// ...
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
public function validatedBy()
{
return 'package_size';
}
}
現在將其定義爲服務並將其標記爲驗證器。
# app/config/config.yml
services:
validator.package_size:
class: Vendor\YourBundle\Validation\Constraints\PackageSizeValidator
tags:
- { name: validator.constraint_validator, alias: package_size }
+ 1ed back,你的回答比較完整 - 我只是從文檔粘貼一段摘錄:)) – moonwave99
你快了24秒。儘管你的回答缺少'getTargets()'方法。反正+1 :) – nifr