4
我需要能夠對Symfony2中的整個實體進行復雜的自定義驗證。Symfony2對整個實體的驗證
如:我entity
有很多subentities
,所有subentities
和必須爲100
據我可以捉摸,Symfony2的驗證只能驗證奇異領域?
我需要能夠對Symfony2中的整個實體進行復雜的自定義驗證。Symfony2對整個實體的驗證
如:我entity
有很多subentities
,所有subentities
和必須爲100
據我可以捉摸,Symfony2的驗證只能驗證奇異領域?
答案是肯定的。您需要針對對象而不是參數指定您的約束,並指定其類級約束的約束。一個有點冗長的例子是這樣的:
config.yml
validator.my.uniquename:
class: FQCN\To\My\ConstraintValidator
arguments: [@service_container]
tags:
- { name: validator.constraint_validator, alias: ConstraintValidator }
validation.yml
FQCN\To\My\Entity:
constraints:
- FQCN\To\MyConstraint: ~
(無參數在這個例子中,約束)
我的約束
namespace FQCN\To;
use
Symfony\Component\Validator\Constraint
;
/**
* @Annotation
*/
class MyConstraint extends Constraint
{
public $message = 'Constraint not valid';
public function validatedBy()
{
return 'ConstraintValidator';
}
public function getTargets()
{
# This is the important bit.
return self::CLASS_CONSTRAINT;
}
}
My ConstraintValidator
class MyConstraintValidator extends ConstraintValidator
{
protected $container;
function __construct($container)
{
$this -> container = $container;
}
function isValid($object, Constraint $constraint)
{
# validation here.
return true;
}
}
任何提示解決'約束MyBundle \ Validator \ Constraint不能放在屬性或getters'? – greg 2013-05-06 19:55:49
@greg,對於未來的訪問者,您必須將約束註釋放在類聲明的上面。 – keyboardSmasher 2014-02-13 15:15:37
請在寫答案時更精確。 – 2014-03-16 17:39:15