Подтвердить что ты не робот

Пользовательский ограничитель ограничений с зависимостью подключения к базе данных Symfony2

Я добавляю пользовательский запрос проверки в проект Symfony2.

В документах отсутствует полный пример, и я не уверен, как на самом деле ввести соединение с базой данных в класс Validator. Я создал службу в своем конфиге, добавил метод validatedBy alias в свой класс 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); 
         ...

Здесь мой сервис config:

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\Ограничения\ZipDatabaseValidator:: __ конструкт() должен быть экземпляром Doctrine\DBAL\Connection, не указанным,

Как, черт возьми, я устанавливал это как службу или иным образом вводил соединение с базой данных?

4b9b3361

Ответ 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';
}