![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Chciałbym zapytać jakie Waszym zdaniem rozwiązanie byłoby najlepsze : 1. klasa FrontController sprawdza $_SERVER['QUERY_STRING'] i $_SERVER['PATH_INFO'] i w zależności od tego które wywołanie wystąpiło tworzy obiekt jednej z klas -> RouterStandard lub RouterNice 2. Klasa Request zajmie się "rozpoznaniem" a FrontController pobierze sobie nazwę -> $this->request->getRouterClassName(); 3. Stworzyć jedną klasę Router (niczym w CodeIgniter) która sama sobie sprawdzi i uruchomi jedną ze swoich metod (albo do standarowych urli albo do nice) 4. Utworzyć klasę Router która tylko sprawdzi $_SERVER['QUERY_STRING'] i $_SERVER['PATH_INFO'] i utworzy obiekt bądż RouterStandard bądź RouterNice. 5. Może jeszcze inne rozwiązanie ? Z góry dziękuję za wszelkie odpowiedzi. Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
najlepszym rozwiązaniem jest ustawianie samemu ktory router ma sie ładować - w index.php po dopaleniu frontcontrolera załadować mu routera z którego ma korzystać...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Szczerze powiedziawszy w index.php, jeśli chodzi o tworzenie obiektów chciałbym mieć tylko
a reszta niech się "robi" niejako sama. Jeśli chodzi o Twoją propozycję to może by tak w pliku config.php utworzyć $config['router'] = 'Nice'; Ten post edytował jang 11.09.2007, 18:41:45 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego potrzebujesz miec jak najmniejszy index.php? Wydaje mi sie, ze dobrze jest to rozwiazac tak:
1. Uruchamiasz Front_Controllera -> on tworzy sobie obeikt routera. 2. Mozesz ustawic nowy router przed odpaleniem Front_Controllera, np: $oFC->setRouter(new Moj_Nowy_Router); Oczywiscie mozna to zrobic za po moca konfigow, ale po co? Wiekszy narzut, bo kontroler zawsze sprawdza, jaki ma wlaczyc router. Akurat router jest jeden przez caly zywot aplikacji i proawdopodobienstwo, ze kiedys odpalisz konfiguracje i zmienisz router na inny jest znikome. Wiec daj na starcie inny router front kontrolerowi i niech sie o routing juz nie martwi. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
A nie lepiej jeden elastyczny router z definiowaniem routow ? Frameworki piszemy aby jak najszybciej rozwijac aplikacje - przewaznie jest to adekwatne do pisania odpowiednio malej ilosci kodu PHP. Tak wiec nasuwa sie pytanie - po co robic wiele klas skoro mozna to zrobic w
jednej konfigurowalnej ? |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Wogóle chyba najlepiej takie coś przenieść do konfiguracji w jakimś xml, albo ini, yaml etc.
Zawsze łatwiej zmienić ;] Pozdrawiam. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
@Prph
Im mniej wszelakiego kodu tym lepiej (mniejsza możliwość pomyłki) a poza tym nie zamierzam pisać instrukcji obsługi własnego frameworka(?) - patrz ZEND FW. Jeśli chodzi o pkt 1. i 2. to poniżej kawałek kodu z mojego FrontController'a Natomiast jeśli chodzi o plik config.php (tablica) to i tak klasa Config z niego korzysta a jedno pole więcej czy mniej do odczytu to przecież żadna różnica. @NULL a więc proponujesz mieszankę CodeIgnitera i Zenda ? Pozdrawiam |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
To my rozmawiamy o Routerze, czy o Request?
Cytat Router - nie zawsze występuje we frameworku, ponieważ nie jest on niezbędny. Jego zadanie polega na przyjęciu żądania i wyznaczenie na jego podstawie nazwy docelowego modułu. Np. dla adresu www.example.com/user/delete router może wyznaczyć kontroler User i akcję Delete. Routery najczęściej stosuje się w celu przyjaznych URLi. Cytat Request - obiekt będący otoczką na dane wejściowe do aplikacji - GET, POST, COOKIE itp. Dobrze napisany request wyręcza programistę i w dużej mierze dba o bezpieczeństwo aplikacji. Np. request może automatycznie usuwać białe znaki z początku i końca danych i dodawać slashe (addslashes()). Jezeli we front kontrolerze rejestrujesz request, to troche mija sie to z celem. Request operuje na tablicach globalnych, wiec nawet singletone nie jest potrzebny. Gdzie potrzebujesz robisz "new Request;". A co do duzych i malych index.php - dodatkowe 5 linii chyba nie jest przestepstwem. Ten post edytował Prph 12.09.2007, 22:55:13 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat To my rozmawiamy o Routerze, czy o Request? Oczywiście o Routerze, przepraszam ale tak mi się wstawiło, metoda setRouter wygląda tak samo.Cytat Jezeli we front kontrolerze rejestrujesz request, to troche mija sie to z celem. Przepraszam ale nie rozumiem o co Ci chodzi ?Gdzie potrzebujesz robisz "new Request;". Czyżbym tworzył obiekty -> Request, Response, Router w nie właściwym miejscu ? FrontController nie jest od tego ? Poniżej kawałek z Zend_Controller_Front
Właśnie we FrontControllerze tworzą obiekty tych klas. Pozdrawiam |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Czyżbym tworzył obiekty -> Request, Response, Router w nie właściwym miejscu ? FrontController nie jest od tego ? Jest, chociaz jak kto woli (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Chodzilo mi o to, ze skoro Request operuje na $_POST, $_GET itd, to nie trzeba na dzien dobry tworzyc jego obiektu we front kontrolerze i trzymac go na wszelki wypadek. Rownie dobrze mozesz utworzyc obiekt requesta w akcji, kiedy bedzie Ci tak na prawde potrzebny. Z kolei router mozesz utworzyc i trzymac we front kontrolerze, bo zawsze zostaje uruchamiany, a czasem zachodzi potrzeba skorzystania z niego w dalszej czesci aplikacji (np do wygenerowania adresu url). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 14:37 |