2016-07-21 2 views
3

Symfony генератор генерируется следующий класс репозитория:Как настроить инъекции зависимостей для класса репозитория в Symfony 3

namespace AppBundle\Repository; 
use AppBundle\Entity\GroupEntity; 

/** 
* GroupEntityRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class GroupEntityRepository extends \Doctrine\ORM\EntityRepository 
{ 


} 

services.yml:

group_entity_repository: 
     class: AppBundle\Repository\GroupEntityRepository 
     arguments: ["@doctrine.orm.entity_manager", AppBundle\Entity\GroupEntity] 

Я настроил services.yml неправильно, но я не сейчас, что использовать в качестве второго аргумента. Поэтому я получаю ошибку:

Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, string given, called in E:\other\dropbox\Dropbox\programavimas\kodo pavyzdziai\htdocs\users_admin_demo\var\cache\dev\appDevDebugProjectContainer.php on line 1626 and defined

Как это исправить? Я не вижу в документации, он просто показал код для генератора и окончательно сгенерированного класса, но не содержит конфигурацию служб.

+0

Найдено [эта тема] (http://stackoverflow.com/questions/17228417/symfony-2-creating-a-service-from-a -репозиторий), он, вероятно, может вам помочь. –

ответ

9

Рекомендуется как в Symfony 3.3:

По состоянию на Symfony 3.3 рекомендуется использовать реальное имя класса в качестве службы (идентификатор read this и this).

AppBundle\Repository\GroupEntityRepository: 
    factory: 'Doctrine\ORM\EntityManagerInterface:getRepository' 
    arguments: 
     - AppBundle\Entity\GroupEntity 

Оригинальный ответ:

Вы можете настроить службу хранилища, как это:

group_entity_repository: 
    class: AppBundle\Repository\GroupEntityRepository 
    factory: ["@doctrine.orm.entity_manager", getRepository] 
    arguments: 
     - AppBundle\Entity\GroupEntity 

Вы, вероятно, не захотите, чтобы вызвать в репозиторий конструктору самостоятельно. Поэтому этот подход просто использует entity_manager для получения репозитория. Контейнер службы Bascially использует этот код, чтобы получить хранилище:

$container->get('doctrine.orm.entity_manager')->getRepository('AppBundle\Entity\GroupEntity'); 
+0

Ты бог. Хорошо, теперь как мне найти эту информацию? Моя проблема заключается в нахождении простой информации очень долго, я думаю. Я работал на этой странице: http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes И если я получаю репозиторию на вашем пути, я получаю сообщение об ошибке «Вы запросили не- существующий сервис "appbundle \ entity \ groupentity". " Но когда я спрашиваю $ groupRepo = $ this-> container-> get ('group_entity_repository'); - оно работает. –

+0

Здесь вы можете найти информацию об использовании заводов для определения сервиса: http://symfony.com/doc/current/components/dependency_injection/factories.html Это не относится к репозиториям, но объясняет, как это работает в целом. –

+0

Другим хорошим источником информации является панель поиска Google. Не быть слишком заурядным, но этот вопрос задавали и отвечали десятки (если не сотни) раз. Попробуйте скопировать/вставить свой заголовок в Google и посмотреть, что происходит. Такая же методика поиска может быть использована и для многих других вещей. – Cerad

Смежные вопросы