Я делаю простое приложение с Symfony. У меня есть службы, настроенные здесь
services:
app.service.comments_service:
class: AppBundle\Service\CommentsService
autowire: true
app.service.projects_service:
class: AppBundle\Service\ProjectService
autowire: true
app.service.files_service:
class: AppBundle\Service\FilesService
autowire: true
app.service.users_service:
class: AppBundle\Service\UserService
autowire: true
Мои сервисы используют репозитории (например, сервис комментариев использует репозиторий комментариев), а вот конструктор CommentsService
свойства
private $entityManager;
private $session;
private $manager;
private $commentsRepository;
Конструктор:
public function __construct(
EntityManagerInterface $entityManager,
Session $session,
ManagerRegistry $manager,CommentsRepository $commentsRepository)
{
$this->entityManager = $entityManager;
$this->session = $session;
$this->manager = $manager;
$this->commentsRepository = $commentsRepository;
}
Когда я пытаюсь запустить свое приложение, я получаю эту ошибку
Неустранимая ошибка PHP: Uncaught Symfony \ Component \ DependencyInjection \ Exception \ AutowiringFailedException: Невозможно автоматически подключить службу «AppBundle \ Repository \ CommentsRepository»: аргумент «$ em» метода «Doctr
ine \ ORM \ EntityRepository :: __ construct () «должен иметь подсказку типа или явно указывать значение.
Не удается автоматически подключить службу «app.service.comments_service»: аргумент «$ commentsRepository» метода «AppBundle \ Service \ CommentsService :: __ construct ()» ссылается на класс «AppBundle \ Repository \ CommentsRepos
itory «, но такой службы не существует. в C: \ xampp \ htdocs \ WINbetTaskManager \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ DependencyInjection \ Compiler \ AutowirePass.php: 285
Есть идеи, как я мог это исправить?
Поэтому я немного поэкспериментировал, и это похоже на работу:
// services.yml
AppBundle\Repository\CommentsRepository:
factory: 'doctrine.orm.entity_manager:getRepository'
arguments: ['AppBundle\Entity\Comments']
Это должно дать autowire достаточно информации для внедрения в хранилище.
Других решений пока нет …