12

カスタム検証クエリを Symfony2 プロジェクトに追加しています。

ドキュメントには完全な例がなく、実際にデータベース接続を Validator クラスに挿入する方法がわかりません。config でサービスを作成し、validatedBy エイリアス メソッドを Constraint クラスに追加して、これを 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 }

この場合、エラーが発生し続けます。

キャッチ可能な致命的なエラー: 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 }

Doctrine を引数としてServiceに渡す必要があります。

編集

エイリアスが validatedBy メソッドが返すものと同じであることを確認してください!
あなたの場合:

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