Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie URL w MVC
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
szuset
Witam,

Grzebie troche w tym php i tak się zastanawiam teraz jak rozwiązać problem generowania URL. Wymyślilem sobie takie rozwiązanie, że w klasie akcji będzie definiowane jakie parametry aktualnie przekazane w zapytaniu będą potrzebne do wygenerowania nowego url-a. np. numer strony, rodzaj sortowania, itp.
No i teraz moje rozterki bo wypadalo by z widoku wywołać metode tworzenia url-a i trzeba by podać nazwę akcji, co mi sie nie wydaje odpowiednie dla widoku. Z koleji zrobienie tego w każdej innej warstwie niepotrzebnie tylko będzie generować dane, bo tylko widok wie czy i jaki url będzie potrzebny.
Tak konkretniej to to chcialem w widoku dac cos ala:

FrontController -> GetURL(Model, ...) no i wypada podac nazwe akcji

Jakoś nie mogę sensownego rozwiązania wymyślić. W związku z tym proszę o pomoc i rozgrzeszenie:)
eai
Generowanie URL powinno odbywać się w Routerze, to router odczytuje dane z URL wiec to router powinien też je generować.
Ustalasz sobie w jaki sposob przekazujesz parametry i tworzysz klase routera.

Np mozesz zrobic ze ?action=cos&where=news&what=edit

routera odczytuje akcje cos, gdzie 'news' co 'edycja'
a dispatcher ma za zadanie polaczyc (include) odpowiednie klasy i wczytac odpowiedni pliczek funkcje ktora je wszystkie wykona....

Tak ja to widzę
szuset
Może się trochę bardziej rozpisze.

A jak rozwiązać sytuację gdy np mamy widok news-y, kalendarz i navigator stron, przy czym wyświetlane newsy zależą od wybranej daty w kalendarzu jak i wybranej strony w navigatorze. Zmieniając stronę należy uwzględnić aktualnie wybraną datę.
Czyli nie sprowadza sie to do prostego przypadku podania widoku i akcji do wykonania.
eai
Newsy, Kalendarz, Navigator stron to sa Modele nie są intergralną częscią FrameWorku tylko jego rozszeżeniem. Każde wywołanie strony wiąże się z przekazaniem url do routera, router pobiera dane ktore sa potrzebne
do dispatchera, dispacher wczytuje odpowiedni sterownik dla danej akcji,
sterownik to np funkcja switch ktora przechwytuje zmienne z routera (GET) i dolacza kolejne modele z odpowiednimi parametrami....

FrameWork daje Ci mozliwosc latwiejszego budowania stron, ale to ty budujesz recznie sterownik ktory uruchamia dane akcje, przeciez FrameWork nie zrobi za Ciebie wszystkiego nie bedzie wiedzial jakie masz funkcje w Modelu i jakie ma podac parametry, czesc kodu musi zostac napisana na zasadzie sterownika dla danej akcji pobierajac odpowiednie parametry.

sterownik.php?action=news&nawigator=32
  1. <?php
  2.  
  3.  $nawigator = nawigator($_GET['nawigator']);
  4.  $kalendarz = kalendarz($nawigator,(empty($_GET['time'])) ? time() : $_GET['time']);
  5.  $newsy = newsy($kalendarz);
  6.  
  7. ?>


Cos na tej zasadzie....
splatch
http://trac.agavi.org/browser/trunk/src/ro...uting.class.php
http://trac.agavi.org/browser/trunk/sample...fig/routing.xml

Czytajcie, a znajdziecie, czy też uczcie się od najlepszych (Agavi?).
Ociu
Osobiście wole takie rozwiązanie: http://ociu.pl/view.dll/39
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.