Как я могу внедрить службу в доктрину Symfony2 хранилище сущностей? - PullRequest
5 голосов
/ 03 февраля 2012

как я могу внедрить сервис в хранилище сущностей с помощью внедрения зависимостей?

я стараюсь так:

<service id="rp.repository.user" class="RP\CoreBundle\Repository\UserRepository" 
factory-service="doctrine.orm.entity_manager" factory-method="getRepository">
  <call method="setSecurityContext">
    <argument type="service" id="security.context"/>
  </call>
</service>

но setSecurityContext он никогда не вызывается Пожалуйста, помогите

1 Ответ

8 голосов
/ 03 февраля 2012

Добавление службы в хранилище не рекомендуется, так как это нарушает разделение проблем. Вместо этого вы должны использовать класс обслуживания, который вызывает хранилище. Исходя из вашего комментария, простой рабочий процесс будет выглядеть так:

  • Определите UserService класс и зарегистрируйте его как сервис.
  • Ввести security.context в UserService
  • Определите UserService::getUsers() (или как вы хотите, чтобы метод был). Именно здесь в методе, который вы использовали бы security.context, чтобы установить критерии для запроса. Вы можете либо передать критерии непосредственно в ваш метод UserRepository::getUsers(), либо построить DQL в объекте UserService и передать его в UserRepository.
  • UserService::getUsers() возвращает то, что UserRepository::getUsers() возвращает.

Вот как мне нравится обрабатывать подобные ситуации, но ради полноты вы также можете использовать простую инъекцию сеттера в свой репозиторий. Вы должны получить хранилище через менеджер сущностей (а не из сервисного контейнера, как в вашем вопросе) и просто позвоните $userRepository->setSecurityContext($this->get('security.context')).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...