Routery i sposoby routingu, Czyli jak to zrobić wydajnie, a się nie narobić |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Routery i sposoby routingu, Czyli jak to zrobić wydajnie, a się nie narobić |
1.08.2010, 20:36:41
Post
#21
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) |
Pozwolę sobie odkopać temat.
Jak proponujecie przekazywać parametry z url do metody akcji? Jako tablicę np. $c->akcja($params); Czy może $c->akcja($id,$page); ? I zależnie od wybranego sposobu jak proponujecie rozwiązać problem error 404? Bo jeżeli mam url: /c/akcja/id/page to jest ok. Natomiast jeżeli ktoś dopisze /c/akcja/id/page/costam/costam2/ to w jaki sposób rozpoznać że strona nie istnieje? Bo można by w każdej metodzie-akcji zdefiniować ile powinna mieć parametrów i liczyć ile jest parametrów wejściowych... No ale to trzeba by było to samo w każdej akcji klepać. Acha... mówię o przypadku routingu niestatycznego kiedy nie mamy w tablicy zapisanych tras. Bo jak ma się trasy to wystarczy sprawdzić czy któraś pasuje i jak żadna nie pasuje to 404. Ten post edytował tomahawk 1.08.2010, 21:08:32 |
|
|
2.08.2010, 20:29:54
Post
#22
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) |
1. W mojej opinii dane z routingu powinno sie wykorzystywac jaka dane z GET i tam je wrzucic - ew ubrac w obiekt.
2. Tak czy tak w jakis sposob musisz zapisac liczbe potrzebnych parametrow do akcji, ew parsowac w .htaccess i ustawic customowy 404. -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
2.09.2010, 17:59:38
Post
#23
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 3.02.2009 Ostrzeżenie: (0%) |
A teraz coś innego , hasło Router, ale nie chodzi o URLe.
Mam aplikację. Dużą aplikację , która pobiera z wielu serwerów wiele plików. Zastanawiam się, jak sensownie rozdzielić obciążenie, tak, aby dać maksymalną elastyczność ( środowisko pracy jest bardzo niestabilne, dajmy na to chociazby że tylko niektóre dedykowane moga pobierac z okreslonych serwerów ) a jednocześnie w miare robic to normalnie. No to pomyslalem o ,,Routerze", choc chyba odpowiednia nazwa bardziej bylby Load Balancer, ktory pod kazdy serwis mialby tablice IP serwerów pod ktore sie laczy zasadą Round-Robin. Dobry pomysl? Zly pomysl? Argumentujcie, propozycje mile widziane ;D |
|
|
15.10.2010, 00:18:58
Post
#24
|
|
Grupa: Zarejestrowani Postów: 301 Pomógł: 25 Dołączył: 15.07.2007 Skąd: Olsztyn Ostrzeżenie: (0%) |
Pozwolę sobie odkopać temat. Jak proponujecie przekazywać parametry z url do metody akcji? Jako tablicę np. $c->akcja($params); Czy może $c->akcja($id,$page); ? I zależnie od wybranego sposobu jak proponujecie rozwiązać problem error 404? Bo jeżeli mam url: /c/akcja/id/page to jest ok. Natomiast jeżeli ktoś dopisze /c/akcja/id/page/costam/costam2/ to w jaki sposób rozpoznać że strona nie istnieje? Bo można by w każdej metodzie-akcji zdefiniować ile powinna mieć parametrów i liczyć ile jest parametrów wejściowych... No ale to trzeba by było to samo w każdej akcji klepać. Acha... mówię o przypadku routingu niestatycznego kiedy nie mamy w tablicy zapisanych tras. Bo jak ma się trasy to wystarczy sprawdzić czy któraś pasuje i jak żadna nie pasuje to 404. Ja osobiście chwalę sobie przekazywanie jako parametry metody czyli: articles/view/What_about_routing/5/2 wywołało by $articlesController -> view('What_about_routing', 5, 2); Oczywiście warto też zrobić tak żeby example.com/articles wywołało np. $articlesController -> main();
dzięki temu metoda kontrolera staje się czytelna a parametry tejże metody dodatkowo można zgrabnie opisać phpdoc jako @param. Jedyny minus to to że articleName (które dopisaliśmy do adresu tylko po to żeby google ładnie indeksowało) jest nie potrzebnie przekazywane. Ale po 1. jest to mały minus a po 2. nie zawsze wrzucamy do adresu takie rzeczy. Co do rozpoznawanie czy strona nie istnieje, to czy na prawdę musimy to robić? Kto przy zdrowych zmysłach będzie tam próbował coś dopisać? Tylko ewentualnie jakieś próby hackingu. Wychodzę z założenia że jeżeli zdarzenie nie jest czymś co normalny użytkownik robi to nie ma co się trudzić z jego obsłużeniem. Na upartego trzeba by było do każdej metody dopisywać coś w stylu: -------------------- Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
|
|
|
15.10.2010, 09:15:35
Post
#25
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 24 Dołączył: 30.03.2009 Skąd: Rokitno Szlacheckie Ostrzeżenie: (0%) |
ja u siebie mam rozwiązane to w ten sposób że do klasy kontrolera przekazywany jest obiekt z parametrami
i potem w kontrolerze już tylko
gdzie $this->router jest ustawiany w konstruktorze (jedyny argument do konstruktora), a następnie dane w metodzie exec() są przetwarzane a w tedy tak jak u @bmL dla celów SEO dalsze argumenty są ignorowane (/art/43/jakis-malo-istotny-tekst") |
|
|
15.10.2010, 14:28:21
Post
#26
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Cytat Jedyny minus to to że articleName (które dopisaliśmy do adresu tylko po to żeby google ładnie indeksowało) jest nie potrzebnie przekazywane. Nie patrzyłem jak to dokładnie zaimplementowało, ale Symfony2 przekazuje parametry wywołania do metod właśnie w taki sposób jak pokazałeś i jest w stanie pominąć zbędne parametry oraz zignorować ich kolejność:
|
|
|
15.10.2010, 15:05:59
Post
#27
|
|
Grupa: Zarejestrowani Postów: 301 Pomógł: 25 Dołączył: 15.07.2007 Skąd: Olsztyn Ostrzeżenie: (0%) |
Będę musiał sprawdzić jak to jest dokładnie zrobione, bo wygląda co najmniej interesująco
Tak na szybkiego spojrzałem i widzę że wymaga to także definiowania kolejnego pliku z regułami routera więc jednak trzeba niestety więc kodu nastukać Ale rozwiązanie jest interesujące Ten post edytował bmL 15.10.2010, 15:19:58 -------------------- Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
|
|
|
2.05.2013, 14:47:24
Post
#28
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 6 Dołączył: 13.01.2012 Skąd: Bytom Ostrzeżenie: (0%) |
Mój router
http://wklej.to/UbZca Klucz zabezp. - 123 Dobrze to zrobiłem? Jeszcze nie skończone, bo brakuje wymagań dla zmiennych tj. tylko liczby, tekst, bez myslnikow itd. itd. Glownie prosze o analize metody route, bo calkiem rozbudowana mi sie wydaje, moze namieszalem? Może okaże się, że dodam kilka ścieżek i samo przeprasowanie tego przez router zajmie 70% czasu wykonywania sie skryptu? -------------------- |
|
|
19.10.2013, 00:08:43
Post
#29
|
|
Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) |
Mój router http://wklej.to/UbZca Klucz zabezp. - 123 Dobrze to zrobiłem? Jeszcze nie skończone, bo brakuje wymagań dla zmiennych tj. tylko liczby, tekst, bez myslnikow itd. itd. Glownie prosze o analize metody route, bo calkiem rozbudowana mi sie wydaje, moze namieszalem? Może okaże się, że dodam kilka ścieżek i samo przeprasowanie tego przez router zajmie 70% czasu wykonywania sie skryptu? Niemożliwe do przetestowania testami jednostkowymi Nie przestrzegasz standardów kodowania Tworzysz "hard dependencies" -------------------- eh, co polska wódka to polska wódka
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.09.2024 - 09:31 |