Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czy akcje to jest to samo co metody w kontrolerze?
Forum PHP.pl > Forum > PHP
jolam
Chciałam się zapytać czy akcje to są metody kontrolera? Próbuje zrozumieć dogłębnie to MVC i między innymi tego nie wiem sad.gif

pozdrawiam serdecznie Jola
woj_tas
Tak.

Przykład: /category/index/

  1. class categoryActions extends autoCategoryActions
  2. {
  3. public function executeIndex(sfWebRequest $request)
  4. {
  5. //
  6. }
  7. }
jolam
A mógłbyś wyjaśnić jak to dokładnie ma działać? Np jest strona sklepu internetowego

strona.pl/akcesoria/pompka145
strona.pl/rowery/gorskie/rower123
stona.pl/historia_firmy
strona.pl/kontak

no to jak do tego dorobione są te kontrolery i akcje? Co się dzieje po wpisaniu takiego adresu w przeglądarce, tak krok po kroku, do momentu wyświetlenia zawartości strony?

pozdrawiam Jola
Crozin
W definicji wzorca MVC, nie ma takiego pojęcia jak "Akcja". W kodzie załączonym przez @woj_tas to metoda executeIndex jest kontrolerem, nie cała klasa.
batman
Cytat(woj_tas @ 6.05.2010, 20:04:40 ) *
Tak.

Nie! Ponieważ:
Cytat(Crozin @ 6.05.2010, 23:25:31 ) *
W definicji wzorca MVC, nie ma takiego pojęcia jak "Akcja".


Musiałabyś sprecyzować o jaki framework chodzi. W przypadku ZF nie ma relacji 1 do 1 między akcjami i metodami kontrolera z dwóch powodów:
1. Metody pomocnicze (np init, preDispatch, czy postDispatch).
2. Routing, czyli kilka adresów (akcji) wskazujących na jedną metodę lub na kilka metod nie odpowiadających nazwom akcji.
jolam
Ja sobie taki mój własny frameworczek pisze:) Tak żeby lepiej to zrozumieć a potem dopiero przesiądę się na jakiś gotowy.

Jak już zostanie wybrany odpowiedni kontroler albo akcja która pobierze dane z modelu, doda je do widoku i wyświetli widok. I to mi się udało zrobić. Ale mam problem z przetworzeniem adresu. Wiem, że to ma wykonywać się w pliku index.php ale nie wiem w jaki sposób zamieniać te adresy na żądania konkretnych kontrolerów? Czy w adresie muszę koniecznie używać takich nazw zmiennych jak kontroler i akcja? Bo teraz to mam np zmienną url w której trzymam adres strony i właśnie na podstawie tego adresu mogę pobierać z bazy dane konkretnej strony (meta, tytuł i zawartość). Bylibyście tak mili i wytłumaczyli mi jak mam zamieniać adresy na kontrolery?

pozdrawiam Jola
zend
Jeśli masz adres w postaci index.php/firma/kontakt robisz explode wszystkiego po index.php, w tablicy z indeksem 0 masz nazwe kontrolera, a z indexem 1 masz nazwe akcji do wykonania, a reszta to już parametry które przekazujesz do akcji
Nie musisz używać takich samych nazw kontrolerów i akcji, ale to wymaga zaimplementowania routingu ktory zamieni to co wpisał user na fizyczny kontroler i akcji
np firma/kontakt => controller - company , action - contact
Cysiaczek
Zainteresuj się pojęciem Routingu, bo to o to Tobie chodzi - o zmapowanie adresu url do postaci konkretnego, sparametryzowanego żądania.
jolam
Cysiaczku masz oczywiście racje. Moim problem jest Router zwany też Front Controlerem. Czytałam trochę na stronie Wikipedii ale nie umiem sobie tego na praktykę przetłumaczyć sad.gif

Czy zmienne w adresie mają mieć z góry zaplanowane nazwy jako kontroler i akcja czy nie koniecznie? Bo z jednej strony łatwiej odczytywać wartości tych zmiennych poprzez tablicę GET a z drugiej dobrze byłoby używać różnych zmiennych w zależności od części wityryny a zachowując wszędzie ładne adresy.

Jeszcze raz bardzo bym prosiła o jakieś większe wytłumaczenie jak zarządzać żądaniami, jak najlepiej skonstruować adresy i jak później w prosty ale i zapewniający pełną kontrole sposób odpowiedzieć na te żądania? W tym wszystkim również ważna dla mnie jest obsługa takich przypadków kiedy adresy są krótkie i mają tylko jedną zmiennąquestionmark.gif

bardzo ale to bardzo proszę o pomoc

Jola
blooregard
~jolam zajrzyj tu:
http://www.heavymind.net/zend-framework-tutorial/

Na przykładzie Zend Frameworka masz tam ładnie wytłumaczone wszystko. Polecam.
Crozin
Cytat
Musiałabyś sprecyzować o jaki framework chodzi.
Nie chodziło mi o żaden FW. To czysta teoria była. winksmiley.jpg
Cytat
W przypadku ZF nie ma relacji 1 do 1 między akcjami i metodami kontrolera z dwóch powodów:
Wzorzec MVC oczywiście nie mówi nic o tym jak mają być zaimplementowane konkretne elementy jego struktury. To czy kontrolerem będzie jeden obiekt, kilka obiektów czy jedna metoda obiektu czy może będzie to jakieś rozwiązanie hybrydowe zależy już tylko od osoby implementującej.

Jeszcze takie doprecyzowanie mojej wypowiedzi:
Cytat
W kodzie załączonym przez @woj_tas to metoda executeIndex jest kontrolerem, nie cała klasa.
@woj_tas podał fragment kodu z FW Symfony - tam rolę kontrolera zazwyczaj (nie jest to wymóg) pełni właśnie pojedyncza metoda obiektu. Oczywiście istnieje coś takiego jak pre/postExecute itp. - ale w gruncie rzeczy to właśnie metoda jest "sednem" kontrolera.

@jolam: co do routingu. W duuużym skrócie:
  1. <?php
  2.  
  3. $router = new WebRequestRouter();
  4. $router->setParams($_SERVER['REQUEST_URI'], $_GET); // np.: /thread/123/ala-ma-kota.html, Array ( [p] => 2, [limit] => 12, [highlight] => 'kot' )
  5. $result = $router->route();
  6.  
  7. var_dump($result); // Array ( [module] => board, [controller] => browse )


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.