Как получить данные таблицы задач в моей пользовательской проверке в Symfony

У меня есть эта ошибка «Попытка вызвать неопределенный метод с именем 'getDoctrine' класса« AppBundle \ Validator \ Constraints \ ContainsAlphanumericValidator '». когда я отправляю форму.

Я хочу получить данные таблицы задач при проверке, но это дает мне ошибку выше.

 // src/AppBundle/Validator/Constraints/ContainsAlphanumericValidator.php
 namespace AppBundle\Validator\Constraints;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use AppBundle\Entity\ToDo;
 use Doctrine\ORM\EntityRepository;

 class ContainsAlphanumericValidator extends ConstraintValidator
 {
   public function validate($value, Constraint $constraint)
   {


        $todo = $this->getDoctrine()->
        getRepository('AppBundle:ToDo')->
        find('1');

        echo '<pre>';
        print_r($todo);

        exit;
        if (!preg_match('/^[a-zA-Z0-9]+$/', $value, $matches)) { 

          $this->context->buildViolation($constraint->message)
            ->setParameter('{{ string }}', $value)
            ->addViolation();
       }
  }
}

Как получить данные таблицы задач в моей пользовательской проверке в Symfony

Не уверен насчет symfony, просто хотел знать, содержит ли класс ConstraintValidatorgetDoctrine()?

Thamaraiselvam 15.03.2018 09:12

Вы должны внедрить EntityManager в свою функцию. Но я рекомендую встроить функцию поиска в каталог репозитория и получать данные оттуда.

ElaAle 15.03.2018 09:19

@ElaAle Спасибо за вашу помощь. Можете ли вы дать мне ссылку, например, на метод каталога репозитория? Потому что я новичок в Symfony.

Bhavin Thummar 15.03.2018 10:09

Лучше обратиться к документации репозитория symfony.com/doc/3.3/doctrine/repository.html, чтобы вы могли создать свои собственные методы запроса внутри репозитория.

Ashutosh Rai 15.03.2018 10:11

Это официальная документация для Symfony 3.4, Как создавать собственные классы репозитория: symfony.com/doc/3.4/doctrine/repository.html. Пожалуйста, обратитесь к документации по используемой вами версии Symfony.

ElaAle 15.03.2018 10:12

@ElaAle Я проверил эту документацию, но проблема все еще не решена.

Bhavin Thummar 15.03.2018 10:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
170
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема связана с внедрением зависимостей. Чтобы обойти эту проблему, Symfony предоставляет движок сервисных контейнеров: https://symfony.com/doc/current/service_container.html

Потому что по умолчанию symfony будет делать:

$validator = new ContainsAlphanumericValidator();

А ты, ты хочешь научить его делать:

$validator = new ContainsAlphanumericValidator($entityManager);

Для этого вам нужно добавить на ваш services.yml:

AppBundle\Validator\Constraints\ContainsAlphanumericValidator:
    attributes:
        - "@doctrine.orm.entity_manager" #require EntityManager as first parameter of your construct

И обновите свой класс следующим образом:

    class ContainsAlphanumericValidator extends ConstraintValidator
{

     private $em;
     public function __construct(EntityManagerInterface $em) {
            $this->em = $em;
     }
     public function validate($value, Constraint $constraint)
     {
                $todo = $this->em->getRepository('AppBundle:ToDo')->
                find('1');

                echo '<pre>';
                print_r($todo);

                exit;
                if (!preg_match('/^[a-zA-Z0-9]+$/', $value, $matches)) { 

                    $this->context->buildViolation($constraint->message)
                        ->setParameter('{{ string }}', $value)
                        ->addViolation();
             }
     }
}

Когда я обновил ваш контент в файле services.yml, я получаю сообщение об ошибке -> Не удается выполнить автоматическое подключение службы «AppBundle \ Validator \ Constraints \ ContainsAlphanumericValidat‌ или»: аргумент «$ em» метода «__construct ()» имеет тип «AppBundle \ Validator \ Constraints \ EntityManagerInterface ", но этот класс не найден.

Bhavin Thummar 15.03.2018 11:04

вы забыли импортировать интерфейс EntityManager, добавив в начало файла: use Doctrine\ORM\EntityManagerInterface;

Yanis-git 15.03.2018 11:16

Спасибо за вашу помощь. Мне не нужно обновлять файл services.yml, а затем я обновил свой код ContainsAlphanumericValidator.php с добавлением использования Doctrine \ ORM \ EntityManagerInterface; метод и моя проблема решена. Большое спасибо.

Bhavin Thummar 15.03.2018 11:18

Другие вопросы по теме