![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) ![]() ![]() |
uczę się. Dlaczego konstruktor w wersji drugiej wywala komunikat Error: Call to a member function get() on a non-object
1.
2.
Ten post edytował twojastara 16.03.2015, 21:14:18 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.11.2014 Ostrzeżenie: (10%) ![]() ![]() |
Ponieważ $this->request->getSession() nie zwraca obiektu. a dlaczego ma znaczenie co zwraca? Dla ścisłości Error: Call to a member function get() on a non-object wywala dla lini nr 14.
a w ogóle jak sensownie przetłumaczyć ten komunikat na polski? Ten post edytował twojastara 16.03.2015, 23:01:32 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
a dlaczego ma znaczenie co zwraca? Dla ścisłości Kod Error: Call to a member function get() on a non-object wywala dla lini nr 14.Ponieważ w następnej linii, właśnie nr. 14, używasz składowej session tak jak obiektu, wywołując na niej metodę get('cart'). Jak zapewne wiesz, nie można wywołać metody na zmiennej która nie przechowuje w sobie obiektu a taka próba kończy się błędem. Powinieneś wstrzyknąć obiekt klasy Request już gotowy z zewnątrz, dokładnie tak jak w pierwszym przypadku a nie tworzyć go od nowa w konstruktorze ponieważ wtedy będzie pusty i zwracał będzie puste wartości. W drugim przypadku, sposób pozyskiwania obiektu klasy Request sprawia że jest on pusty. Nie możesz oczekiwać że już samo utworzenie obiektu Request sprawi że będzie miał on w sobie dane które może Ci zwrócić. W systemie Symfony, obiekt Request możesz pozyskać z kontenera $request = $container->get('request'). Jeżeli masz problem z dostępem do obiektu Request w klasie Card, spraw aby obiekty klasy Cart tworzone były jako usługi (services). Przykładowy plik services.xml mógłby wyglądać tak: CODE <?xml version="1.0" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/ser...0.xsd"> <services> <service id="app_utils.card.service" class="\AppBundle\Util\Card"> <argument type="service" id="request"/> </service> </services> </container> Dzięki temu, w kontrolerach, obiekty klasy Cart możemy pozyskiwać tak $card = $this->get('app_utils.card.service') o ile klasę Card zadeklarujesz jak w pierwszym przykładzie. A za powoływanie obiektów klasy Card i wstrzykiwanie im obiektu Request martwił będzie się kontener zależności Symfony. acha, no tak, Mariner w pierwszej odpowiedzi pisał coś podobnego, (ale zamiast 'w konstruktorze' napisał 'w kontrolerze'). Fakt. Mój błąd, chodziło oczywiście o konstruktor a nie kontroler. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.10.2025 - 08:14 |