Symfony2: UniqueValidator для формы - PullRequest
0 голосов
/ 13 января 2012

У меня есть RegistrationFormType со следующими ограничениями проверки:

public function getDefaultOptions(array $options)
    {
        $collectionConstraint = new Collection(array(
            'email' => array(
                new NotBlank(),
                new Email(array('message' => 'Ungültige E-Mail Adresse')),
                ),
            'username' => new Unique(),
            'code' => new MaxLength(array('limit'=>20)),
            'plainPassword' => new MaxLength(array('limit'=>20)),
        ));

        return array(
            'csrf_protection' => false,
            'validation_constraint' => $collectionConstraint,
        );
    }

Для обеспечения уникальности я создал уникальный класс (расширение Contraint) и UniqueValidator (расширение ConstraintValidator), как описано здесь: http://www.michelsalib.com/2011/04/create-your-own-constraint-validator-in-symfony2-a-doctrine-unique-validator/

Проблема в том, что я получаю следующую ошибку при отправке формы:

Catchable Fatal Error: Argument 1 passed to ...\Validation\Constraint\UniqueValidator::__construct() must be an instance of Doctrine\ORM\EntityManager, none given

Кажется, что EntityManager не внедряется в ConstraintValidator, хотя я создал определение службы в моем config.yml, хотя:

services:
    eventiply.validator.unique:
        class: Ajado\EventHubBundle\Validation\UniqueValidator
        arguments: 
            entityManager: "@doctrine.orm.entity_manager"
        tags:
            - { name: validator.constraint_validator, alias: validator.unique }

Есть идеи, как мне здесь продвинуться?

Ответы [ 2 ]

1 голос
/ 18 января 2012

Обнаружил проблему:

У меня был следующий код в моей уникальной зависимости:

/**
 * @Annotation
 */
class Unique extends Constraint{
    public $message = 'Dieser Wert muss eindeutig sein, ist leider aber schon vergeben';
    public $propertyName;
    public $property;
    public $entityName;

    public function __construct($options = null) {

        parent::__construct($options);
    }

    public function validatedBy()
    { 
        // copied that from http://symfony.com/doc/current/cookbook/validation/custom_constraint.html
        return get_class($this).'Validator';
    }
}

И это исправлено:

/**
 * @Annotation
 */
class Unique extends Constraint{
    public $message = 'Dieser Wert muss eindeutig sein, ist leider aber schon vergeben';

    public function __construct($options = null) {

        parent::__construct($options);
    }

    public function validatedBy()
    {
        return 'validator.unique';
    }

}

0 голосов
/ 14 января 2012

Ваш YAML выглядит прочь. Значение arguments должно быть массивом, а не хешем:

arguments:
    - "@doctrine.orm.entity_manager"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...