[SF2][Symfony] Wyświetlenie danych z bazy na każdej stronie |
[SF2][Symfony] Wyświetlenie danych z bazy na każdej stronie |
8.02.2017, 15:22:48
Post
#1
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) |
Witam, chcę w headerze wyświetlić ilość nieprzeczytanych przez użytkownika wiadomości. Muszę to zrobić w dwóch miejscach.
Mam taki element w widoku
robiąc {{ render(controller(...)) }} niepotrzebnie dwa razy wykonuje to samo zapytanie do bazy. Jaki inny sposób polecacie? |
|
|
8.02.2017, 15:27:36
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Czemu controller? Czemu nie zrobisz z tego serwisu, ktory bedzie te dana wyliczal tylko raz?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
8.02.2017, 15:32:35
Post
#3
|
|
Grupa: Zarejestrowani Postów: 620 Pomógł: 143 Dołączył: 22.12.2010 Ostrzeżenie: (0%) |
Możesz zrobić listenera który będzie naliczał użytkownikowi ilość nieprzeczytanych wiadomości (po zapisaniu nowej wiadomości) i zapisywał tę wartość w tabeli użytkownika - wyświetlanie bedziesz miał proste bo tylko zrobisz app.user.unread_messages (zwał jak zwał ) lub możesz wykorzystać do tego twig extension i tam stworzyć globalną funkcję dla twiga w której będziesz zliczał ilość wiadomości
|
|
|
8.02.2017, 16:19:00
Post
#4
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) |
Dzięki za pomoc, stworzyłem już serwis z takim kodem
Problem w tym, że od czasu do czasu dostaję wyjątek "Error: Call to a member function getEmail() on null". getEmail() to funkcja z $this->user->getEmail(). Jestem poprawnie zalogowany na stronie. services.yml: Kod app.user:
class: AppBundle\Model\User arguments: ['@doctrine.orm.entity_manager', '@security.token_storage'] Ten post edytował Lirdoner 8.02.2017, 16:20:20 |
|
|
8.02.2017, 16:23:01
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Przeciez tutaj nigdzie nie wywolujesz getEmail()... przesledz sciezke wyjatku
ps: i czemu userdata zrobiles jako static dla klasy? To powinna byc wlasciwosc obiektu. obiekt serwisu powinien byc wywolywany jako singleton czyli jedna instancja obiektu -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
8.02.2017, 16:23:03
Post
#6
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) |
Wywołuję w metodzie getUnreadMessagesCount(). Tam jest zapytanie dość duże dlatego usunąłem podając tutaj. Wystarczy, że odświeżę stronę i wyjątek znika.
|
|
|
8.02.2017, 16:24:47
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
No to z jakiegos powodu token nie zwraca ci usera. Co pisze ci konsola symfony dla tego wyjatku? Moze gubisz sesje?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
8.02.2017, 21:28:18
Post
#8
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) |
Racja, wyrzuciłem tą zmienną statyczną i dodałem liczbę nieprzeczytanych wiadomości jako właściwość obiektu. Serwis dodałem jako globals dla twiga i aktualnie wywołuję go tylko w jednym szablonie przez userdata.getUnreadMessagesCount()
[code] twig: globals: userdata: "@app.user" [\code] Teraz jak na złość wszystko działa Wrzucę co mówi konsola gdy znowu wywołam ten bład. Tak czy siak, dzięki za pomoc. Ok, ogólnie to dziwny problem - zauważyłem, że dostaję tego exceptiona gdy zmienię choćby jedną literę w szablonie TWIG. Potem F5 i już wszystko gra Ktoś wie co może być problemem? Co do konsoli to nic konkretnego nie mówi, widzę, że jest zalogowany poprawnie Ten post edytował Lirdoner 8.02.2017, 16:30:02 |
|
|
9.02.2017, 09:48:13
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Cytat Ok, ogólnie to dziwny problem - zauważyłem, że dostaję tego exceptiona gdy zmienię choćby jedną literę w szablonie TWIG. Potem F5 i już wszystko gra Gdy zmienisz cos w twig to on przebudowuje cache zapewne i cos tam mu wtedy nie pasi... I zgaduj zgadula teraz co :/
Ktoś wie co może być problemem? Co do konsoli to nic konkretnego nie mówi, widzę, że jest zalogowany poprawnie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
9.02.2017, 11:58:37
Post
#10
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) |
Ok, znalazłem kilka pomocnych linków: http://stackoverflow.com/questions/2491663...-twig-extension
Zmiana polegała na wyrzuceniu z konstruktora TokenStorage i zamiast niego wstrzyknięcie ContainerInterface, a potem już tylko $this->container->get('security.token_storage')->getToken()->getUser() (rzecz jasna po sprawdzeniu czy getToken() i getUser() zwraca obiekt) |
|
|
9.02.2017, 12:05:13
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
No to ladnie. Dzieki za info, przyda sie na przyszlosc
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 23.05.2024 - 16:50 |