La inyección de un servicio en un repositorio no es recomendable, ya que rompe la separación de intereses. En su lugar, debe usar una clase de servicio que llame al repositorio. Basado en su comentario, un sencillo flujo de trabajo se vería así:
UserService
Definir clase, y registrarlo como un servicio.
security.context
Inyectar en UserService
UserService::getUsers()
Definir (o como quiera que el método sea). Es aquí en el método que usaría security.context
para establecer los criterios para la consulta. Puede pasar los criterios directamente a su método UserRepository::getUsers()
, o construir el DQL en el objeto UserService
y pasarlo al UserRepository
.
UserService::getUsers()
devuelve lo que UserRepository::getUsers()
devuelve.
Así es como me gusta manejar situaciones como estas, pero, para completar, también podría usar una inyección setter simple en su repositorio. Buscaría el repositorio a través del administrador de entidades (y no del contenedor de servicios como en su pregunta), y simplemente llame al $userRepository->setSecurityContext($this->get('security.context'))
.
no sé si lo que quiero hacer es bueno o no. Quiero acceder al contexto de seguridad en el repositorio para verificar si el usuario actual tiene el role_user o no para agregar algún filtro en todas las solicitudes de dql. con DI, no es posible porque el administrador de entidades llama a la función getRepository y crea una instancia del repositorio solicitado, no lo obtiene del contenedor, ¿alguien tiene una idea para este problema? thx mucho – EAdel