Исключение «Невозможно подключить автосервис» при попытке очистить кэш Symfony 4 приложения. - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть проект под Symfony 4, и когда я пытаюсь сделать composer обновление для моего проекта, я получаю эту ошибку

     Executing script cache:clear 
Script cache:clear returned with error code 1[KO]
!!
!!  In DefinitionErrorExceptionPass.php line 54:
!!  

!!    Cannot autowire service "App\Repository\ActeRepository": argument "$registry" of method "__construct()" references interface "Symfony\Br  
!!    idge\Doctrine\RegistryInterface" but no such service exists. Try changing the type-hint to "Doctrine\Persistence\ManagerRegistry" instea  
!!    d.

!!  

!!
!!
Script @auto-scripts was called via post-install-cmd
 [KO]
<?php

, и ActeRepository является следующим

namespace App\Repository;

use App\Entity\Acte;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;

/**
 * @method Acte|null find($id, $lockMode = null, $lockVersion = null)
 * @method Acte|null findOneBy(array $criteria, array $orderBy = null)
 * @method Acte[]    findAll()
 * @method Acte[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class ActeRepository extends ServiceEntityRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Acte::class);
    }

    // /**
    //  * @return Acte[] Returns an array of Acte objects
    //  */
    /*
    public function findByExampleField($value)
    {
        return $this->createQueryBuilder('a')
            ->andWhere('a.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('a.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    }
    */

    /*
    public function findOneBySomeField($value): ?Acte
    {
        return $this->createQueryBuilder('a')
            ->andWhere('a.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }
    */
}

Сейчас я не знаю, в чем проблема, и проект не может быть обновлен. Я также пытаюсь удалить файл var и vendor и очистить кэш composer и Symfony, но та же проблема появляется, что не вижу Теперь, почему я нашел несколько предложенных решений, но они не работают ??

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

я просто заменяю во всех файлах репозитория publi c функция __construct (managerRegistry $ registry) => publi c функция __construct (\ Doctrine \ Common \ Persistence \ ManagerRegistry $ registry) считает

0 голосов
/ 12 февраля 2020

Конструктор должен выглядеть следующим образом:

public function __construct(ManagerRegistry $registry)
{
    parent::__construct($registry, Acte::class);
}

Добавить оператор использования:

use Doctrine\Common\Persistence\ManagerRegistry;

Расширить класс с помощью:

extends ServiceEntityRepository
0 голосов
/ 11 февраля 2020

Чтобы решить эту проблему, просто удалите ваш конструктор в ActeRepository.php, он не нужен.

Это проблема с автопроводами, поэтому вы должны инициализировать поле в своем хранилище, если хотите сохранить его здесь.

Если это не работает, попробуйте изменить тип параметра в конструкторе:

use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;

class ActeRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Acte::class);
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...