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