2016-05-17 3 views
2

I обновлен от Symfony от 2.7 до 3.0. Он работает почти. Только проблема: Я не могу перезаписать AppBundle\Entity\MyRepository в коде ниже, файл даже не нужен (я переименовал его для тестирования) и получил пропущен Symfony.Symfony 3: не может перезаписывать репозиторий

приложение/Config/services.yml

# old, 2.7 (worked): 
myRepositoryService: 
    class: AppBundle\Entity\MyRepository 
    factory_service: doctrine.orm.entity_manager 
    factory_method: getRepository 
    arguments: [AppBundle\Entity\MyEntity] 

# new, 3.0 (skips the MyRepository): 
myRepositoryService: 
    class: AppBundle\Entity\MyRepository 
    factory: ['@doctrine.orm.entity_manager', 'getRepository'] 
    arguments: ['AppBundle\Entity\MyEntity'] 

AppBundle \ Entity \ MyRepository

class MyRepository extends EntityRepository { 
    public function findAll() { 
     die("MyRepository->findAll()"); // not executed 
    } 
} 

AppBundle \ Controller \ MyController.php

$myItems = $this->get('myRepositoryService')->findAll(); // should die but doesn't 

Неужели я неправильно сконфигурировал свой services.yml, чтобы Symfony создавал временный файл репозитория для объекта вместо использования созданного мной файла?

Заранее благодарен!

+0

Вы проверили, является ли '$ this-> get ('myRepositoryService')' экземпляром 'AppBundle \ Entity \ MyRepository'? И вы задали 'repositoryClass' этому классу в сопоставлении сущности? –

+0

@dragoste Я забыл установить 'repositoryClass' для этого объекта. * facepalm * Пожалуйста, разместите его как ответ, и я соглашусь с ним. Большое спасибо! –

+1

Я забыл об этом несколько раз. ;-) –

ответ

2

Следующий код работает для меня в Symfony 3.0:

some_repository: 
    class: AppBundle\Repository\SomeRepository 
    factory: ['@doctrine.orm.default_entity_manager', getRepository] 
    arguments: [AppBundle:SomeEntity] 

Пожалуйста, обратите внимание, что отличается от имени службы вами фабрики и что нет одинарных кавычек для фабричного метода и имени объекта.

Также, как я упоминал в своем комментарии, должно быть установлено repositoryClass в сопоставлении сущности.

+0

лучше цитировать строки с двоеточием - 'arguments: ['AppBundle: SomeEntity']' – luchaninov

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