Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida ao criar o BaseController

Estou usando a versão mais recente do Symfony (5.1) e ao tentar passar o repositório de forma genérica dá erro na injeção de dependencias, mas se passo a classe MedicosRepository ao invés da interface funciona. Como ficaria nessa situação?

Cannot autowire service "App\Controller\BaseController": argument "$repository" of method "__construct()" references interface "Doctrine\Persistence\ObjectRepository" but no such service exists.
 You should maybe alias this interface to one of these existing services: "App\Repository\EspecialidadesRepository", "App\Repository\MedicosRepository".

Se esperar ObjectRepository ou EntityRepository no construtor da esse erro acima, mas se esperar por EspecialidadesRepository ou MedicosRepository funciona.

Obrigado desde já meus amigos!!

4 respostas

Oi Hoiama,

Alguém com mais conhecimento com symfony pode te dar um esclarecimento melhor, mas pelo que eu entendi o symfony não encontrou uma implementação para a interface ObjectRepository do Doctrine, logo não soube resolver corretamente as depêndencias. Você consegue usar os repositórios de especialidade e médicos por que elas são implementações concretas. Para usar ObjectRepository você teria que cadastrar uma implementação dessa interface nos serviços do symfony, mas não faria muito sentido nesse caso, já que o que você quer é usar o polimorfismo para tentar ser mais genérico. Eu acredito que para fazer o que você quer teria que alterar o comportamento padrão do symfony em resolver automaticamente as depêndencias passadas para o controller, é um caminho.

Hoiama, na versão mais recente do Symfony essa interface deixou de existir. Vê qual interface seus repositórios estão implementando agora, e use elas como tipo do parâmetro. ;-)

Olá Vinicius, na versão 5.1 ela ainda é utilizada, mas o Symfony informa que é um serviço não registrado. =/

class ServiceEntityRepository extends EntityRepository implements ServiceEntityRepositoryInterface
class EntityRepository implements ObjectRepository, Selectable
solução!

Consegui resolver o problema. Segui um exemplo da documentação registrando a minha interface no config/services.yaml .

Trabalhando com Interfaces

Precisei fazer isso para o Factory e para a Repository.

# config/services.yaml

    services:
       # ....
       App\Helper\EntidadeFactory: ~
       App\Repository\BaseRepository: ~

Obrigado pela ajuda meus amigos!!