![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Mam już prawie ukończonego frameworka. Z większych rzeczy pozostał mi do napisania kontroler. Podpatrywałem ZF, przeglądałem rózne arty znalezione na google na ten temat. Ale nadal zastanawiam się jak powinien być zbudowany kontroler. Tzn wiem co chcę osiągnąć ale nie wiem jak to podzielić na Front Controller i na kontrolery. Ogólnie chciałbym mieć możliwość wybierania modułów i akcji danego modułu na podstawie np. takiego linka:
Kod http://serwer/module=module1/action=action1/value=1/value2=2/.../... Możecie coś doradzić? Ten post edytował J4r0d 22.02.2007, 18:00:25 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Zbudowales framework bez kontrolera - ROTFL (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
A o adresowaniu - to masz wyszukiwarke i slowo ROUTER. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zbudowales framework bez kontrolera - ROTFL (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Co Cię tak bawi? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
też nie rozumiem co w tym śmiesznego - framework raczej nie ma w definicji posiadania kontrolera - to tylko zestaw narzędzi do budowania aplikacji - nigdzie nie jest powiedziane że kontroler musi być - bo to zależne jest od zastosowanego wzorca projektowego. To tak OT - a co do tematu to chyba na wortalu był jakis artykuł na ten temat.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kontroler to serce frameworka - można przypuszczać, że to co nazywasz frameworkiem, to kilka klas, mocniej lub luźniej ze sobą związanych, ale nie ułatwiających pisania pełnej aplikacji.
Widzisz już gdzie jest pies pogrzebany? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Kontroler to serce frameworka - można przypuszczać, że to co nazywasz frameworkiem, to kilka klas, mocniej lub luźniej ze sobą związanych, ale nie ułatwiających pisania pełnej aplikacji. Wiem o co chodzi, ale to nie zmienia faktu, że to co napisałem jest frameworkiem (mocniej lub luźniej powiązanych ze sobą klas) pomimo tego, że nie ma jeszcze kontrolera, który ułatwia pisanie aplikacji. Zależy kto jak rozumie zasadę działania kontrolera. Dla mnie front controller ma odpalać główne akcje. (...)a co do tematu to chyba na wortalu był jakis artykuł na ten temat. Wiem, czytałem dużo artów ale każdy ma inne podejście do tego. Zastanawiam się czy zamknąć wszystko w jednej klasie czy utworzyć klasy: Router - posiadałaby metodę pobierającą z urla nazwę: kontrolera, modułu, akcji i parametry oraz metodę tworzoną urla na podstawie otrzymanego tokenu Dispatcher - na podstawie otrzymanego tokenu (token byłby tablicą asocjacyjną zawierającą nazwę kontrolera, modułu, akcji i parametry), który odpalałby odpowiednią akcje.. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Podziel na klasy. Dzięki temu podmieniając np. Router, będziesz mógł parametry pobierać np. z konsoli a nie url'a. Tak samo dispatcher, podmieniając go akcją nie musi być metoda klasy Kontrolera, a np. klasa w folderze kontrolera (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
kontroler to serce frameworka MVC. To może i byłaby prawda - a i tak nie do końca.
Tak więc takie ironiczne podejście jest co najmniej nie na miejscu. Zobacz sobie temat o MVC na tym subforum. jest tam sporo rad, jak uruchamiać akcje, jak można dzielić je na moduły itp. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Czy obiekt kontrolera akcji powinien dziedziczyć po Front Controllerze czy powinien być odrębną klasą?
Ten post edytował J4r0d 6.03.2007, 10:34:40 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Czy obiekt kontrolera akcji powinien dziedziczyć po Fron Controllerze czy powinien być odrębną klasą? Dziedziczyć? A po co w kontrolerze akcji metody dispatch(), addFilter(), registerFilter() etc? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Odrębną. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale po co stosować MVC ? Nie lepiej IPO zastosować ?
|
|
|
![]()
Post
#12
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tak, ale po co stosować MVC ? Nie lepiej IPO zastosować ? Bo jest wygodne i ktoś tak chce. Przy okazji mógł byś wytłumaczyć magiczny skrót IPO ? |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Input Processing Output (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Mi to znacznie bardziej pasuje - plus jeszcze event driven i jestem w siódmym niebie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
A po co w kontrolerze akcji metody dispatch(), addFilter(), registerFilter() etc? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wiesz jakie metody zawiera bo go już anpisałeś. A ja zastanawiam się jak to zrobić.. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) ![]() ![]() |
Cytat Input Processing Output biggrin.gif Mi to znacznie bardziej pasuje - plus jeszcze event driven i jestem w siódmym niebie smilingsmiley.gif Ok, jakieś linki czy coś? Pierwsze słyszę. Po za tym wnioskując z nazwy. Input - analizujemy żądanie Processing - realizujemy je Output - zwracamy wynik. Jeżeli tak to jest to samo co MVC i we wszystkich aplikacjach, inaczej się nie da. Nic odkrywczego. J4r0d: FrontController analizuje input (te twoje linki), i odpala kontroller który później odpala akcje. Controller napewno nie powinien dziedziczyć po FrontController, jeżeli już to na odwrót. |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
J4r0d: FrontController analizuje input (te twoje linki), i odpala kontroller który później odpala akcje. Controller napewno nie powinien dziedziczyć po FrontController, jeżeli już to na odwrót. We wszystkich artykułach, które znalazłem na sieci Front Controller analizuje inputa i odpala odpowiednią akcje. Strzałek: mógłbyś podać prosty przykład Front Controllera i Action Controllera? Prosty bo chcę załąpać jak to ugryźć. Podglądałem Rapide, ZF i jak na początek nie mogę się w tym odnaleźć.. |
|
|
![]()
Post
#18
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) ![]() ![]() |
U mnie nie ma czegoś takiego jak action controller. U mnie jest to mniej więcej tak:
Powinno Cię trochę naprowadzić. |
|
|
![]()
Post
#19
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
~J4r0d mam coś co może Ci pomóc stworzyć swojego kontrolera.
Oto lista rzeczy za które odpowiedzialny jest FrontController w Symfony:
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
@mike_mech: dziękuje zawsze się przyda. Patrząc na przykład Strzałka to każda akcja to osobna klasa dziedzicząca po klasie abstrakcyjnej kontrolera.. Czyli mając w aplikacji 50 akcji to mamy 50 klas dziedziczących po klasie abstrakcyjnej ? :/
|
|
|
![]()
Post
#21
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
@J4r0d Idac wskazowkami @mike_mech rowniez polecam rozejrzec sie po zrodlach SF odnosnie budowy class do akcji. Sa 2 mozliwosci 1 akcja, 1 klasa, 1 plik. Lub wiele akcji, 1 klasa, 1 plik (oczwiscie tutaj jest to uzaleznione od modulu).
|
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze raz przeglądałem tematy na tym forum dotyczące budowania kontrolera i czytałem m.in. takie wypowiedzi niektórych użytkowników: "Tu powinieneś zastosować forward() zamiast redirect()"
Czym w takim razie (chodzi mi o sposób implementacji) różni się redirect() od forward() ? Przecież oba opierają się o header() |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mylisz się redirect() to jest przekierowanie przez header, czyli następuje przeładowanie na następną stronę.
Natomiast forward jest wirtualne, bez przekierowania, jedna akcja wywołuje następną. |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
wyglada to mniej wiejcej tak $this->forward('modul', 'akcja', 'parametry'). Tak jest to u mnie zrobione.
|
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ok jeszcze jedno: forward i redirect powinno być w kontrolerze czy routerze?
A jak masz redirect? $this->redirect($url) ? |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#28
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
No nie wiem, dla mnie forward jest w kontrolerze, a reditect w Response (wysyłanie nagłówka).
|
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Teoretycznie tak, ale praktycznie jest lepiej w controlerze. Ew. w kontrolerze mozna zrobic nakladke na response (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#30
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem (i nie tylko moim bo tak jest w Mojavi, Agavi, Symfony a nawet w CakePHP) controller jest odpowiedzialny zarówno za redirect jak i za forward.
Jest to dla mnie całkowicie naturalne. forward jets to przerzucenie się na inną akcję podczas tego samego żądania a redirect jest to przeskoczenie na inną akcję z wykonaniem kolejnego żądania. Nie jest to do końca zwrócenie responsea (pomimo tego że wymaga to zwrócenia nagłówków). Obie powyższe decyzje są decyzjami, które powinien podjąć kontroler i to on powinien się tym zająć. Za tym rozwiązaniem stoi chmara developerów i jest to rozwiązanie stare i sprawdzone. Nie widzę tu nic nad czym trzeba debatować (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 0 Dołączył: 14.06.2003 Skąd: Tomaszów Lubelski/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
@mike_mech: Zgadzam sie. Ale jesli mamy klase typu response która zarzadza w jakis tam sposób wysylanymi nagłowkami to takie redirect() powinno być nakladką na taką klase.
|
|
|
![]()
Post
#32
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
@mike_mech: Zgadzam sie. Ale jesli mamy klase typu response która zarzadza w jakis tam sposób wysylanymi nagłowkami to takie redirect() powinno być nakladką na taką klase. Dokładnie. Też twierdzę że technicznie powinien to być mechanizm wykonywany przez Responsea a tylko ewentualnie uruchamiany przez Controllera.Powinien pójść nagłówek z kodem 302 i wszystko jasne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#33
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
@mike-mech: co robi metoda $this->getContext() ?
Jak wygląda metoda clearHttpHeaders() i setHttpHeaders()? |
|
|
![]()
Post
#34
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Powyższa funkcja to tylko przykład, który miał mniej więcej zobrazować to co się dzieje. Jest to część fragment klasy sfWebController z Symfony.
Po szczegóły odsyłam do sfWebResponse (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#35
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
Pewnie jak w większości frameworków:
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Oczywiście nazwy mogą się różnić. A co do dyskusji. Imho, nie ma nad czym się rozwodzić. Interpretacji jest tyle, ilu programistów. Każdy robi po swojemu. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 06:45 |