参数未提供给服务

ant*_*ony 2 symfony

我的验证器服务未提供给验证器.我收到一个错误:"警告:我的\ Bundle\Validator\Constraints\MyCustomValidator :: __ construct()......缺少参数1"

这是我的services.yml

// My\Bundle\Resources\config\services.yml
services:
    my.validator.service:
        class: My\Bundle\Validator\Constraints\MyCustomValidator
        arguments: [ @doctrine.orm.entity_manager ]
Run Code Online (Sandbox Code Playgroud)

这是我的验证器类:

// My\Bundle\Validator\Constraints\MyCustomValidator
namespace My\Bundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Doctrine\ORM\EntityManager;

class MyCustomValidator extends ConstraintValidator
{
    private $em;

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

    public function validate($value, Constraint $constraint)
    {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的validation.yml

// My\Bundle\Resources\config\validation.yml
My\Bundle\Entity\Page:
    properties:
        name:
            - NotBlank: ~
            - My\Bundle\Validator\Constraints\MyCustom: ~
Run Code Online (Sandbox Code Playgroud)

这是我的Constraint课程

namespace My\Bundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

class MyCustom extends Constraint
{
    public $message = 'Something is wrong with "%string%".';

    public function validatedBy()
    {
        return get_class($this) . 'Validator';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,我会非常感激.

我已经尝试将参数名称改为"@ doctrine.orm.default_entity_manager",但没有运气.

ant*_*ony 5

问题是我的services.yml.因为该服务被用作验证器,所以我必须使用validator.constraint_validator标记.这是在文档中.哎呦!

services:
    my.validator.service:
        class: My\Bundle\Validator\Constraints\MyCustomValidator
        arguments: [ @doctrine.orm.entity_manager ]
        tags:
            - { name: validator.constraint_validator, alias: my_custom_alias}
Run Code Online (Sandbox Code Playgroud)

我还需要重写Constraint类validatedBy()方法,以便它返回上面的别名,例如:

// My\Bundle\Validator\Constrains\MyCustom.php
public function validatedBy()
{
    return 'my_custom_alias';
}
Run Code Online (Sandbox Code Playgroud)