![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 4 Dołączył: 18.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wg mnie, klasa routera powinna parsować url'e jak i je tworzyć, ogólnie wszystko co z nimi związane. U siebie, chcę zrobić to tak, że będę miał adresy postaci:
domena.pl/modul/akcja/parametr1/parametr2/parametrN Z wydobyciem modulu i akcji i wywołania tego, nie będę miał problemu, ale rozchodzi się tutaj o parametry, które będą przekazywane do akcji. W jaki sposób je rozróżniać? Skąd router ma wiedzieć który parametr jest do czego? Nie wchodzi w grę tutaj ustawianie wszystkiego w htaccess, bo nie do każdej akcji będą przekazywane parametry w ten sam sposób. No i nie chcę mieć adresów: domena.pl/?modul=foo&akcja=bar¶m1=... itd, chociaż wtedy nie byłoby problemu. Myślałem nad czymś takim jak jest w Symfony, a mianowicie pliczek routing.yml itd, ale nie mam pojęcia jak to zaimplementować (IMG:style_emoticons/default/smile.gif) Ktoś podsunie jakieś sensowne rozwiązania? Albo wskaże mi moje błędy |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Zobaczj ka to wyglada we frameworkach...
wzsystko zazwyczaj dziala tak: index.php?q=TUTEN ADRES przykład example.pl/index.php?q=modul/akcja/parametr1/parametr2/parametrN Roouter odczytuje parametr $_GET['q'] i go odpowiednio parsuje(miliony sposobów) pierwsze dwa bierzesz na modul i akcje, reszte pod parametry, wrzucając do soobnej tablicy i dostęp po indeksie (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Routing w Symfony2 jest napisany (chyba) do tego stopnia "niezależnie", że powinieneś być w stanie zrobić Copy&Paste, lekko dostosować i będzie działać: http://github.com/symfony/symfony/tree/mas...onents/Routing/
Co do sposobu działania routingu w symfony 1.4. Każda reguła ma zdefiniowany parametr url, który jest zwykłym wyrażeniem regularnym: Kod hello: Przy wchodzeniu na stronę /hello/crozin/blah/12345 po kolei sprawdzasz czy któraś z zdefiniowanych reguł pasuje do URLa (preg_match).url: /hello/:name/blah/:abc requirements: name: [a-z]+, abc: \d+ -> #^/hello/(?<name>[a-z]+)/blah/(?<abc>\d+)$# Natomiast generowanie URLi to proces odwrotny do powyższego. Podajesz nazwę reguły oraz parametry (jeżeli są potrzebne). Sprawdzasz czy każdy z parametrów spełnia wymagania (ponownie preg_match) i sklejasz ostateczny URL. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Wg mnie, klasa routera powinna parsować url'e jak i je tworzyć, ogólnie wszystko co z nimi związane. U siebie, chcę zrobić to tak, że będę miał adresy postaci: W ZF robi się baaardzo króciutką regułkę w .htaccess i całą resztę opisuje na klasach... do przykładu co podałeś musisz określić ruting tak właśnie, by klasa wiedziała co który parametr znaczy... da się zrobić też dla pozostałych nie opisanych parametrów zczytać domyślnie jeśli dasz na końcu regułki '*' i wtedy z reszty parametrów na końcu adresu było by /nazwa1/wartosc1/nazwa2/wartosc2... ale ogólnie to dłuższy temat... routing na klasach opisuje się mniejwięcej w możliwej kolejności wystąpienia i prubuje się dopasować do pierwszego lepszego... jeśli jakiegoś parametru nie ma a miał być można określić domyślną wartość czy to akcji, zmiennej, kontrolera czy modułu... ogólnie jeśli byś chcaił się zainteresować ZF to poczytaj tutaj:domena.pl/modul/akcja/parametr1/parametr2/parametrN Z wydobyciem modulu i akcji i wywołania tego, nie będę miał problemu, ale rozchodzi się tutaj o parametry, które będą przekazywane do akcji. W jaki sposób je rozróżniać? Skąd router ma wiedzieć który parametr jest do czego? Nie wchodzi w grę tutaj ustawianie wszystkiego w htaccess... http://manual.zfdes.com/pl/zend.controller.router.html - można routing oprzeć także na wyrażeniach regularnych... - masz tam przykłady i dobrze opisane co i jak - ale po angielsku... Ktoś podsunie jakieś sensowne rozwiązania? Albo wskaże mi moje błędy Jakiś framwork najlepiej - chyba, że chcesz coś sensownego od podstaw pisać ^^ - ale to i tak pasowało by luknąć na jakieś gotowe rozwiązania... - to, że podałem linka do manuala ZF nie znaczy, że akurat jego musisz wybierać...
Ten post edytował zegarek84 29.06.2010, 20:44:27 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Router to w zasadzie dopasowywanie do wzorca. Musisz sobie określić, jakie rodzaje ograniczeń Twój router będzie obsługiwać, następnie dodać metodę, która pozwoliłaby wprowadzić pojedynczą regułę ograniczeń, która przy okazji będzie z parametrów budować wyrażenie regularne. Sprawdzanie jest proste - jedziesz po kolejnych regułach i pierwsza, która zaakceptuje wyrażenie regularne, jest sprawdzana pod kątem tego, czy wszystkie obowiązkowe parametry są ustawione. Jak wszystko jest OK, budujesz tablicę parametrów i zwracasz ją.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 2.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja korzystam z takiego rozwiązania:
.htaccess RewriteEngine On RewriteRule ^([_a-zA-Z0-9]+)?/?([_A-Za-z0-9]+)?/?([_A-Za-z0-9]+)?/?([_A-Za-z0-9]+)?/?([_A-Za-z0-9]+)?/?([_A-Za-z0-9]+)?/?([_A-Za-z0-9]+)?$ /index.php/$0/$1/$2/$3/$4/$5/$6 i dalej
dalej korzystasz z tego jak z tablicy (IMG:style_emoticons/default/smile.gif) $a[0] ..... a adres wygląda tak http://www.jakisadres/zimenna1/zmienna2/zmienna3 Nie wiem czy o takie rozwiązanie ci chodziło. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 77 Dołączył: 5.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Podepnę się z moim problemem, mam prosty router, który przekształca mi adres:
http://domain.com/index.php/module/action/param1/param2/ na tabilcę, a dalej dane już co moduł co akcja idą w aplikację. Generalnie jest w porządku, nie potrzebuję do tego htaccess. Jednak chciałbym zrobic coś takiego, kiedy w aplikacji mam kilka modułów, powiedzmy cms, article, news i dla modułu article chciałby tworzyć adresy typu: http://domain.com/index.php/article/Krzysi...zis_98_lat_hej/ obecnie to zrobiłem tak, że dla modułu "article" jest ustawiona akcja domyślna "show" - na sztywno, ale odpada, kiedy dopiszemy inne akcje, typu comment. I pytanie jest takie, czy ktoś może podpowiedzieć, jak odbierać adresy, kiedy nie wiemy czy iidentyfikator action będzie podany, czyli adres http://domain.com/index.php/article/Krzysi...zis_98_lat_hej/ ma tak samo działać jak http://domain.com/index.php/article/show/K...zis_98_lat_hej/ czy http://domain.com/index.php/article/Krzysi..._lat_hej/page/1 z paginatorem widzę tutaj propozycję wyrażeń regularnych, jednak na mój niedoświadczony rozumek, to chyba nie sprawdzi się, skoro tytuł jak i nazwa akcji będą pasować do jednego wzorca np. przykład http://domain.com/index.php/article/show/wielkanoc/ http://domain.com/index.php/article/wielkanoc/ a po ilości parametrów też raczej odpada, bo nie wiadomo, czy nie będzie drugiego parametru. Kurcze, mam nadzieję, że nie namieszałem za bardzo, analizuję jak to jest właśnie w symfony i kohanie, ale jakoś nie mogę znaleść rozwiązania problemu. Prosiłbym o jakąś wskazówkę. Pozdrawiam |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 2.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jednak chciałbym zrobic coś takiego, kiedy w aplikacji mam kilka modułów, powiedzmy cms, article, news i dla modułu article chciałby tworzyć adresy typu: http://domain.com/index.php/article/Krzysi...zis_98_lat_hej/ obecnie to zrobiłem tak, że dla modułu "article" jest ustawiona akcja domyślna "show" - na sztywno, ale odpada, kiedy dopiszemy inne akcje, typu comment. I pytanie jest takie, czy ktoś może podpowiedzieć, jak odbierać adresy, kiedy nie wiemy czy iidentyfikator action będzie podany, czyli adres http://domain.com/index.php/article/Krzysi...zis_98_lat_hej/ ma tak samo działać jak http://domain.com/index.php/article/show/K...zis_98_lat_hej/ czy http://domain.com/index.php/article/Krzysi..._lat_hej/page/1 z paginatorem htacces likwiduje z adresu index.php a co za tym idzie ładniej to wyglada, co do odbierania adresu kiedy nie masz podanej akcji to swich / if .. else widzę tutaj propozycję wyrażeń regularnych, jednak na mój niedoświadczony rozumek, to chyba nie sprawdzi się, skoro tytuł jak i nazwa akcji będą pasować do jednego wzorca np. przykład http://domain.com/index.php/article/show/wielkanoc/ http://domain.com/index.php/article/wielkanoc/ a po ilości parametrów też raczej odpada, bo nie wiadomo, czy nie będzie drugiego parametru. Kurcze, mam nadzieję, że nie namieszałem za bardzo, analizuję jak to jest właśnie w symfony i kohanie, ale jakoś nie mogę znaleść rozwiązania problemu. Prosiłbym o jakąś wskazówkę. Pozdrawiam Powinienes mieć usystematyzowane tworzenie linków tzn. http://domain.com/index.php/article/wielkanoc http://domain.com/index.php/article/wielkanoc/edit http://domain.com/index.php/article/wielkanoc/comment Bynajmniej u mnie się to świtnie sprawdza, zawsze wiem czego mam się na której pozycji spodziewać wyr. reg. sprawdza się doskonale bo tylko to co spełnia Ci warunek będzie przepuszczone (bezpieczeństwo), kwestia dopracowanie sobie wzorca i przemyslenia jak chcesz aby aplikacjia działała. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 2 Dołączył: 2.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
A ja widzę to tak:
1. Router uniwersalny parsujący link: explodujesz po slashach i bierzesz: 1- kontroller, 2-akcja, i w pętli{ 3-parName, 4-parValue} 2. Dopisujesz wyjątki od reguły, np w kontrolerze article (któremu możesz również dodać alias - artykuł i wersje językowe: news) przepisujesz brak akcji na akcję show: np przez tablicę:
Najpierw sprawdzasz dopasowanie do wyjątkó, i tylko jeżeli tam nie znajdziesz dopasowania to przepuszczasz do routera standardowego. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
ja poszłem w podobnym kierunku ,wykorzytsałem preg_match parsując link , dzięki temu dowolnie można go budować
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 07:25 |