2012-03-12 2 views
4

Мне нужно иметь возможность выполнить сложную выборочную проверку всего объекта в Symfony2.Symfony2 Проверка всей сущности

Например: мой entity имеет много subentities, и все subentities должны быть равны 100.

Насколько я могу понять, Symfony2 валидаторов только проверить особые поля?

ответ

6

Ответ да. Вам нужно указать ваше ограничение на объект, а не параметр, и указать ограничение на ограничение уровня класса. Несколько многословным пример заключается в следующем:

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; 
    } 
} 
+0

Любые советы для решения 'Ограничение MyBundle \ Validator \ Constraint не может быть поставлен на свойства или getters'? – greg

+0

@greg и для будущих посетителей вы должны поместить аннотацию ограничения ВЫШЕ объявить класс. – keyboardSmasher

+0

Больше точности при написании ответов, пожалуйста. –