Ответ да. Вам нужно указать ваше ограничение на объект, а не параметр, и указать ограничение на ограничение уровня класса. Несколько многословным пример заключается в следующем:
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: ~
(нет арг для ограничения в данном примере)
My Constraint
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;
}
}
Мой 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
@greg и для будущих посетителей вы должны поместить аннотацию ограничения ВЫШЕ объявить класс. – keyboardSmasher
Больше точности при написании ответов, пожалуйста. –