Używam ustawień bezpieczeństwa Symfony. Wszystko działa dobrze, ale nie wiem, jak zrobić jedną ważną rzecz:
W twig mogę dotrzeć do informacji o aktualnym użytkowniku, wykonując:
Welcome, {{ app.user.username }}
lub podobne
Jak uzyskać dostęp do tych samych informacji w kontrolerze? W szczególności chcę uzyskać bieżącą jednostkę użytkownika, aby móc przechowywać ją w relacji w innej encji (mapowanie jeden do jednego).
Naprawdę miałam nadzieję, że tak będzie
$this->get('security.context')->getToken()->getUser()
ale to nie działa. To daje mi klasę typu
Symfony\Component\Security\Core\User\User
i chcę jednego typu
Acme\AuctionBundle\Entity\User
który jest moim bytem ...
entity-framework
security
symfony
Robert Martin
źródło
źródło
Odpowiedzi:
Podejście do Symfony 4+, 2019+
W symfony 4 (prawdopodobnie również 3.3, ale tylko w rzeczywistości przetestowane w 4) możesz wstrzyknąć
Security
usługę przez automatyczne okablowanie w kontrolerze w następujący sposób:Symfony 2 - Podejście
Jak mówi @ktolis, najpierw musisz skonfigurować swój
/app/config/security.yml
.Następnie z
powinno wystarczyć!
$user
to Twój obiekt użytkownika! Nie musisz ponownie pytać.Znaleźć sposób, aby skonfigurować dostawców w
security.yml
od SF2 Dokumentacji i spróbuj ponownie.Powodzenia!
źródło
$user = $this->security->getUser();
,$user
jest zawszenull
dla mnie, niezależnie od tego, czy jestem zalogowany, czy nie.Najlepsze praktyki
Zgodnie z dokumentacją od Symfony 2.1 po prostu użyj tego skrótu:
Powyższe nadal działa w Symfony 3.2 i jest skrótem do tego:
Przykład : A jeśli chcesz bezpośrednio nazwę użytkownika:
Jeśli zły typ klasy użytkownika
Użytkownik będzie obiektem, a klasa tego obiektu będzie zależeć od dostawcy użytkownika .
źródło
Wątek jest trochę stary, ale myślę, że to prawdopodobnie mogłoby zaoszczędzić komuś czas ...
Napotkałem ten sam problem, co pierwotne pytanie, że typ jest wyświetlany jako Symfony \ Component \ Security \ Core \ User \ User
Ostatecznie okazało się, że zalogowałem się za pomocą użytkownika w pamięci
mój plik security.yml wygląda mniej więcej tak
typ użytkownika in_memory to zawsze Symfony \ Component \ Security \ Core \ User \ User, jeśli chcesz użyć własnej encji, zaloguj się przy użyciu użytkownika tego dostawcy.
Dzięki, hj
źródło
W symfony> = 3.2, dokumentacja stwierdza, że:
Wpis na blogu o tym
źródło
źródło
Cóż, najpierw musisz poprosić o nazwę użytkownika z sesji w akcji kontrolera w następujący sposób:
następnie wyślij zapytanie do bazy danych i pobierz obiekt za pomocą zwykłego dql, takiego jak
$ user powinien teraz trzymać użytkownika z tą nazwą użytkownika (możesz oczywiście użyć innych pól)
... ale będziesz musiał najpierw skonfigurować konfigurację /app/config/security.yml, aby używała odpowiedniego pola dla twojego dostawcy zabezpieczeń, jak na przykład:
mam nadzieję że to pomoże!
źródło
$this->get('security.context')->getToken()->getUser()
sama pobiera zalogowany obiekt użytkownika. Nie musisz ponownie odpytywać. Właściwie jakiej wersji używasz?