4 votes

Ne peut pas câbler automatiquement le service dans Symfony

Je suis en train de diviser un grand service.yaml en quelques fichiers plus petits. Dans le service.yaml d'origine, j'avais

services:

_defaults:
    autowire: true
    autoconfigure: true
    public: false

App\Domain\Country\Infrastructure\Repository\CountryRepository:
    public: true
    class: App\Domain\Country\Infrastructure\Repository\CountryRepository
    factory: ["@doctrine.orm.default_entity_manager", getRepository]
    arguments: [App\Domain\Country\Entity\Country]

Ensuite, j'ai ajouté un import au début du service.yaml

imports:
  - {resource: services/repositories.yaml}

repositories.yaml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true

     App\Domain\Country\Infrastructure\Repository\CountryRepository:
        factory: ["@doctrine.orm.default_entity_manager", getRepository]
        arguments: [App\Domain\Country\Entity\Country]

Après cela, j'ai commencé à obtenir une erreur

  Cannot autowire service "App\Domain\Country\Infrastructure\Repository\CountryRepository": argument "$class" of method "Doctrine\ORM\EntityRepository::__construct()" references class "Doctrine\ORM\Mapping\ClassMetadata" but no such service exists.  

Qu'est-ce qui ne va pas ici ?

0voto

Trix Points 9647

Utilisez des arguments nommés à la place :

repositories.yaml

services:

     App\Domain\Country\Infrastructure\Repository\CountryRepository:
        factory: ["@doctrine.orm.default_entity_manager", getRepository]
        arguments:
            $class: '@App\Domain\Country\Entity\Country'

0voto

OK sure Points 1525

Vous ne devriez pas avoir besoin de définir le dépôt aux fins de l'autowiring.

services.yaml:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

Entity\Country:

id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }
}

Repository\CountryRepository:

``

Et enfin, votre service:

repository = $repository;
    }
}

L'autowiring verra que vous avez injecté ce CountryRepository dans le constructeur de ExampleService et gérera le reste.

``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X