Napisane: 17.03.2015, 00:56:36 | |
Grupa: Zarejestrowani Postów: 47 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) |
Wybacz to pytanie ale lepiej się upewnić. Jeżeli coś jeszcze mogę doradzić to tak jak polecał kolega wcześniej, żeby zrozumieć lepiej działanie symfony, dobrze jest choć raz prześledzić pracę całego programu. Jeżeli nie masz do zainstaluj xdebug oraz ide którym będziesz mógł debugować skrypty i na bieżąco śledzić czy nawet zatrzymywać pracę programu w dowolnym momencie. Być może na początku wydawać by się to mogło trudną sprawą ale wiedz że wcześniej czy później i tak tego nie unikniesz. Im szybciej się na to zdecydujesz tym lepiej dla Ciebie. Ze swojej strony mogę polecić eclipse z php dev doinstaluj xdebuga, czego nie będziesz wiedział zapytaj na forum. Naprawdę warto. Polecam i pozdrawiam. |
Forum: Przedszkole · Podgląd postu: #1149948 · Odpowiedzi: 18 · Wyświetleń: 1 347 |
Napisane: 17.03.2015, 00:35:42 | |
Grupa: Zarejestrowani Postów: 47 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) |
Recz w tym, że to pierwsza i jedyna funkcja w tej przykładowej aplikacji, że wcześniej zmienna $request nie jest nigdzie manipulowana, więc to tu obiekt $request jest powoływany do ż. Framework Symfony2 używa Twojego kontrolera w taki mniej więcej sposób: CODE $request = new Request(); $request->bind($_POST, $_GET); $controller = new YourController(); $response = $controller->test1Action($request); Tylko tak teraz patrzę w Twój kod ale nie widzę tam kontrolera tylko funkcję. Czy u Ciebie kontroler jest obiektem klasy Controller? |
Forum: Przedszkole · Podgląd postu: #1149946 · Odpowiedzi: 18 · Wyświetleń: 1 347 |
Napisane: 17.03.2015, 00:26:00 | |
Grupa: Zarejestrowani Postów: 47 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) |
Obiekty Request w kontrolerach Symfony2 są tak często używane że zdecydowano się uprościć programistom sprawę z ich pozyskiwaniem w kontrolerach. Dlatego jeżeli zadeklarujesz obiekt request w parametrach metody to otrzymasz gotowy obiekt wypełniony danymi. Nie trzeba chyba wyjaśniać że normalnie tak to nie działa. To nie jest tak że w Symfony konstrukcja new Request() nie jest tożsama jak w php. Obiekty są tworzone tak samo, z tym że obiekt Request w Symfony2, zanim go otrzymasz, w metodzie kontrolera wypełniany jest przez framework danymi z żądania. Tu nie ma żadnej "magii". |
Forum: Przedszkole · Podgląd postu: #1149944 · Odpowiedzi: 18 · Wyświetleń: 1 347 |
Napisane: 16.03.2015, 23:50:01 | |
Grupa: Zarejestrowani Postów: 47 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. |
Forum: Przedszkole · Podgląd postu: #1149938 · Odpowiedzi: 18 · Wyświetleń: 1 347 |
Napisane: 16.03.2015, 20:08:23 | |
Grupa: Zarejestrowani Postów: 47 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) |
Ponieważ $this->request->getSession() nie zwraca obiektu. Sprawdź co zwraca. Jest to związane ze sposobem w jaki przypisywany jest obiekt $request. W pierwszej wersji z zewnątrz, a więc możemy się domyślać że jest zainicjowany i posiada już przypisany obiekt session. W drugim przypadku obiekt Request tworzony jest w kontrolerze a więc nie posiada danych żądania ani session. |
Forum: Przedszkole · Podgląd postu: #1149918 · Odpowiedzi: 18 · Wyświetleń: 1 347 |
Napisane: 23.03.2015, 22:32:55 | |
Grupa: Zarejestrowani Postów: 47 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) |
Sprawdź sobie czy odpowiada Ci takie działanie kodu, który w przypadku błędu połączenia nie pokazuje ostrzeżenia (warning) CODE mysqli_report(MYSQLI_REPORT_ALL); try { $database = new mysqli('localhost', 'root', 'password', 'db_name'); } catch(Exception $error) { } Albo taka propozycja użycia tego kodu: CODE <?php function database() { mysqli_report(MYSQLI_REPORT_ALL); $database = mysqli_connect("localhost", "my_user", "my_password", "world"); return $database; } try { $database = database(); } catch (Exception $e) { // tutaj obsługujemy błąd połaczenia // przykładowo wyświetlamy komunikat echo sprintf ( 'Mysqli connect Error with message : "%s" and Code "%s" ', $e->getMessage(), $e->getCode() ); $database = null; // database ustawiamy na false - czyli brak połączenia, jeżeli będziemy dalej korzystali z niej w naszym skrypcie } if($database) { // jeżeli database przechowuje połączenie/nie jest false if(!$database->set_charset("utf8")) { // prawdź kodowanie throw new Exception('Błąd wyboru kodowania!'); } } |
Forum: Przedszkole · Podgląd postu: #1151107 · Odpowiedzi: 55 · Wyświetleń: 1 686 |
Nowe odpowiedzi Brak nowych odpowiedzi Popularny temat (Nowe) Popularny temat (Brak nowych) |
Sonda (Nowe) Sonda (Brak nowych) Zamknięty temat Przeniesiony temat |
Wersja Lo-Fi | Aktualny czas: 4.05.2024 - 02:02 |