Я следовал инструкциям на https://www.tomasvotruba.cz/blog/2017/10/16/how-to-use-repository-with-doctrine-as-service-in-symfony/, чтобы превратить мои репозитории в сервисы, которые можно внедрить в мои тесты. Вот что у меня есть:
Мой репозиторий:
<?php
declare(strict_types=1);
namespace OpenCFP\Domain\Repository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use OpenCFP\Domain\Entity\Airport;
final class AirportRepository
{
/**
* @var EntityRepository
*/
private $repository;
public function __construct(EntityManagerInterface $entityManager)
{
$this->repository = $entityManager->getRepository(Airport::class);
}
}
Моя сущность
<?php
declare(strict_types=1);
namespace OpenCFP\Domain\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="airports")
*/
final class Airport
{
/**
* @ORM\@Id
* @ORM\Column(type="string", length=3)
*/
private $code;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $country;
}
Вот что я добавил в свой файл services.yml
согласно инструкциямЯ обнаружил
OpenCFP\Domain\Repository\:
public: true
resource: '%kernel.project_dir%/src/Domain/Repository/*'
Я добавил следующий код в setUp()
метод моего теста, основанный на направлениях, которые я нашел здесь
$kernel = self::bootKernel();
$this->airport = $kernel->getContainer()->get(AirportRepository::class);
Когда я запускаюtest Я получаю следующее сообщение об ошибке:
Symfony \ Component \ DependencyInjection \ Exception \ RuntimeException: не удается автоматически подключить службу "OpenCFP \ Domain \ Repository \ AirportRepository": аргумент "$ entityManager" метода "__construct () "ссылается на интерфейс" Doctrine \ ORM \ EntityManagerInterface ", но такой службы не существует. Его нельзя зарегистрировать автоматически, поскольку он находится в другом корневом пространстве имен.