【问题标题】:Symfony2: UniqueValidator for formSymfony2:表单的 UniqueValidator
【发布时间】:2012-02-09 20:47:05
【问题描述】:

我有一个带有以下验证约束的 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,
        );
    }

为了确保唯一性,我创建了一个 Unique Class(扩展 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 }

有什么想法可以在这里取得进展吗?

【问题讨论】:

  • 我有一个类似的problem。我从来没有解决它。

标签: dependency-injection symfony validation


【解决方案1】:

发现问题:

我的唯一约束中有以下代码:

/**
 * @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';
    }

}

【讨论】:

    【解决方案2】:

    你的 YAML 看起来不对劲。 arguments 值应该是一个数组,而不是散列:

    arguments:
        - "@doctrine.orm.entity_manager"
    

    【讨论】:

    • 改了——没有任何效果
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2023-03-07
    • 2017-12-17
    • 2013-08-14
    • 1970-01-01
    • 2022-06-30
    • 2012-11-27
    • 2017-01-26
    相关资源
    最近更新 更多