Проверка Symfony2 на всю сущность - PullRequest
4 голосов
/ 13 марта 2012

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

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

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

1 Ответ

6 голосов
/ 13 марта 2012

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

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

Мое ограничениеValidator

class MyConstraintValidator extends ConstraintValidator
{
  protected $container;

  function __construct($container)
  {
    $this -> container = $container;
  }

  function isValid($object, Constraint $constraint)
  {
    # validation here.
    return true;
  }
}
...