Iniettando un servizio in un repository non è raccomandato, in quanto si rompe la separazione degli interessi. Invece, dovresti usare una classe di servizio che chiama il repository. Sulla base di un commento, un semplice flusso di lavoro sarebbe simile a questa:
- Definire
UserService
di classe, e registrarlo come servizio.
- Iniettare
security.context
in UserService
- Definire
UserService::getUsers()
(o quello che volete il metodo di essere). È qui nel metodo che useresti security.context
per impostare i criteri per la query. È possibile passare i criteri direttamente al metodo UserRepository::getUsers()
o creare il DQL nell'oggetto UserService
e passarlo a UserRepository
.
UserService::getUsers()
restituisce qualsiasi ritorno UserRepository::getUsers()
.
Questo è il modo in cui mi piace gestire situazioni come queste, ma per motivi di completezza, è possibile utilizzare anche l'iniezione semplice setter nel repository. Si dovrebbe recuperare il repository attraverso il gestore di entità (e non dal contenitore di servizi come nella domanda), e semplicemente chiamare $userRepository->setSecurityContext($this->get('security.context'))
.
fonte
2012-02-03 15:55:54
Non so se quello che voglio fare è una cosa buona o meno. Voglio accedere al contesto di sicurezza nel repository per verificare se l'utente corrente ha il ruolo_utente o meno per aggiungere un filtro in tutte le richieste dql. con la cosa di DI i non è possibile perché il gestore di entità chiama la funzione getRepository e crea un'istanza del repository richiesto, non la ottiene dal contenitore, qualcuno ha un'idea per questo problema? grazie mille – EAdel