具有数据库连接依赖关系的自定义约束验证器 Symfony2 [英] Custom Constraint Validator with Database Connection Dependency Symfony2

查看:21
本文介绍了具有数据库连接依赖关系的自定义约束验证器 Symfony2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

文档 缺少完整的示例,我没有确定如何将数据库连接实际注入 Validator 类.我已经在我的配置中创建了服务,在我的 Constraint 类中添加了 validateBy 别名方法,并在我的 Validator 类中进行了设置:

使用Doctrine\DBAL\Connection;ZipDatabaseValidator 类扩展了 ConstraintValidator{/**** @var 连接*/私人 $connection;公共函数 __construct(Connection $dbalConnection) {$this->connection = $dbalConnection;}公共函数验证($zipcode,约束 $constraint){$sql = 'SELECT * FROM zip_table WHERE zip_code = ?';$stmt = $this->connection->prepare($sql);...

这是我的服务配置:

validator.node.zip_in_database:类:Acme\Bundle\Validator\Constraints\ZipDatabaseValidator参数:[@database_connection]标签:- { 名称:validator.constraint_validator,别名:zip_in_database }

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

<块引用>

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

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

解决方案

validator.node.zip_in_database:类:Acme\Bundle\Validator\Constraint\ZipDatabaseValidator参数:[@database_connection]标签:- { 名称:validator.constraint_validator,别名:zip_in_database }

您必须将教义作为参数传递给您的服务.>

编辑

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

//Acme\Bundle\Validator\Constraint\ZipDatabase 类公共函数validatedBy(){返回 '​​zip_in_database';}

I'm adding a custom validation query to a Symfony2 project.

The docs lack a complete example, and I'm not sure how to actually inject the database connection into the Validator Class. I've created the service in my config, added the validatedBy alias method in my Constraint class, and set up this in my Validator Class:

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); 
         ...

Here's my service config:

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

I keep getting errors, in this case:

Catchable Fatal Error: Argument 1 passed to Acme\Bundle\Validator\Constraints\ZipDatabaseValidator::__construct() must be an instance of Doctrine\DBAL\Connection, none given,

How the heck to I set this up as a service or otherwise inject the database connection?

解决方案

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

You must pass doctrine as an argument to your Service.

Edit

Make sure the alias is the same as the validatedBy method returns!
in your case:

//Acme\Bundle\Validator\Constraint\ZipDatabase class
public function validatedBy()
{
    return 'zip_in_database';
}

这篇关于具有数据库连接依赖关系的自定义约束验证器 Symfony2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆