12

我正在向 Symfony2 项目添加自定义验证查询。

文档缺少完整的示例,我不确定如何将数据库连接实际注入到验证器类中。我在我的配置中创建了服务,在我的约束类中添加了验证的别名方法,并在我的验证器类中进行了设置:

use Doctrine\DBAL\Connection;

class ZipDatabaseValidator extends ConstraintValidator
{

    /**
     *
     * @var Connection
     */
    private $connection;

   public function __construct(Connection $dbalConnection)  {

        $this->connection = $dbalConnection;
    }

    public function validate($zipcode, Constraint $constraint)
    {

        $sql = 'SELECT * FROM zip_table WHERE zip_code = ?';
        $stmt = $this->connection->prepare($sql); 
         ...

这是我的服务配置:

validator.node.zip_in_database:
        class: Acme\Bundle\Validator\Constraints\ZipDatabaseValidator
        arguments: [@database_connection]
        tags:
            - { name: validator.constraint_validator, alias: zip_in_database }

我不断收到错误,在这种情况下:

可捕获的致命错误:传递给 Acme\Bundle\Validator\Constraints\ZipDatabaseValidator::__construct() 的参数 1 必须是 Doctrine\DBAL\Connection 的实例,没有给出,

我如何将其设置为服务或以其他方式注入数据库连接?

4

1 回答 1

5
validator.node.zip_in_database:
    class: Acme\Bundle\Validator\Constraint\ZipDatabaseValidator
    arguments: [@database_connection]
    tags:
        - { name: validator.constraint_validator, alias: zip_in_database }

您必须将教义作为参数传递给您的Service

编辑

确保别名与 validBy 方法返回的别名相同!
在你的情况下:

//Acme\Bundle\Validator\Constraint\ZipDatabase class
public function validatedBy()
{
    return 'zip_in_database';
}
于 2013-01-17T10:16:01.363 回答