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. |
|
|
|
twojastara [PHP]konstruktor 16.03.2015, 20:01:46
Mariner Ponieważ $this->request->getSession() n... 16.03.2015, 20:08:23
Aqu Odwołujesz się tutaj do metody get, więc $thi... 16.03.2015, 23:11:09
Damonsson Mniej więcej tłumaczenie tak czytaj: Odwołujesz si... 16.03.2015, 23:16:30
twojastara acha,
no tak, Mariner w pierwszej odpowiedzi pisa... 16.03.2015, 23:28:47
Damonsson Bo tworzysz nowy obiekt new Request() w którym nor... 16.03.2015, 23:46:05
Damonsson Na chłopski rozum:
Masz pudełko w którym trzymasz... 16.03.2015, 23:52:22
twojastara dzięki Wam obu.
Tylko, że ja wcale nie uważam by ... 16.03.2015, 23:59:30
Damonsson Symfony robi to za Ciebie. Sprawdź:
[PHP] pobierz... 17.03.2015, 00:03:17
twojastara tak, to już przekonałes mnie wcześniej.
Muszę się... 17.03.2015, 00:17:57
Mariner Obiekty Request w kontrolerach Symfony2 są tak czę... 17.03.2015, 00:26:00
twojastara Cytat(Damonsson @ 17.03.2015, 00:03:1... 17.03.2015, 00:32:36 
Mariner Cytat(twojastara @ 17.03.2015, 00:29... 17.03.2015, 00:35:42
twojastara Cytat(Mariner @ 17.03.2015, 00:35:42 ... 17.03.2015, 00:42:51
Mariner Wybacz to pytanie ale lepiej się upewnić. Jeżeli c... 17.03.2015, 00:56:36
twojastara tak, już przy wcześniejszym poście dot. xdebug zaz... 17.03.2015, 01:12:03
com Poczytaj o depedency injection a zrozumiesz czemu ... 17.03.2015, 11:48:42 ![]() ![]() |
|
Aktualny czas: 29.12.2025 - 13:47 |