【问题标题】:Custom Constraint Validator with Database Connection Dependency Symfony2具有数据库连接依赖关系的自定义约束验证器 Symfony2
【发布时间】:2013-01-17 02:29:05
【问题描述】:

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

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

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 }

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

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

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

【问题讨论】:

  • 阅读您发布的手册页中的部分内容:具有依赖关系的约束验证器
  • 您好,谢谢gview。我遵循了手册的那一部分,但关于如何将验证器约束作为服务实现的细节不完整。

标签: symfony


【解决方案1】:
validator.node.zip_in_database:
    class: Acme\Bundle\Validator\Constraint\ZipDatabaseValidator
    arguments: [@database_connection]
    tags:
        - { name: validator.constraint_validator, alias: zip_in_database }

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

编辑

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

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

【讨论】:

  • 谢谢金特罗。我用我的配置更新了这个问题。我正在传递连接。我认为问题在于我无法弄清楚如何将 Validator 类用作服务。
  • 这样你的验证器数据库连接就搞定了。你也做了一个约束类吗?约束类是您在代码中使用的。它反过来访问验证器类。这一切都在食谱示例中。
  • 你的 service.yml 中的别名 zip_in_database 必须与你的 Constraint 类返回的 validateBy 方法相同! (返回“zip_in_database”)。
  • 那行得通,我想我的别名有误!我还删除了“parent::__construct();”从构造函数中,这不是必需的。感谢您的帮助,很难理解 DIC 和两个不同的 Validator 类之间的相互作用。
  • @Acyra 很高兴知道它有效。我知道,有时可能会令人困惑。遇到了一些麻烦。
猜你喜欢
  • 2017-06-01
  • 2015-02-13
  • 1970-01-01
  • 2013-07-14
  • 2014-01-15
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多