![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 22.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam wątpliwości odnośnie logiki działania routingu w aplikacji implementującej MVC. Na wstępie słowo odnośnie mojej implementacji: Aplikacja składa się z modułów, każdy moduł ma swoje kontrolery widoki i modele. Tak więc router musi zwrócić prócz kontrolera i akcji nazwę modułu (oraz opcjonalnie parametry). Mój dylemat opiszę na podstawie tras dynamicznych (router obsługuje również trasy statyczne oraz regex). Trasy definiuję podając "ścieżkę" oraz tablicę wartości "domyślnych" i tak mam np trasę:
Dla ścieżki np. 'blog/posts' router, stwierdziwszy, że podana ścieżka pasuje do danej trasy, zwróci tablicę: ('module' => 'blog', 'controller' => 'posts', 'action' => 'index'). Jednak gdy zdefiniuję kolejną trasę następująco:
pojawia się problem. Gdyby router przypasował daną trasę np do ścieżki 'articles/all', zwróciłby tablicę: ('module' => 'articles', 'controller' => 'articles', 'action' => 'all'). Jednak podana ścieżka ('articles/all') pasuje do obu powyższych tras. Obecnie działający router zwróci więc tablicę na podstawie pierwszej ścieżki: ('module' => 'articles', 'controller' => 'all', 'action' => 'index'). Oczywiście nie istnieje taki kontroller jak 'all' w module 'articles' więc pojawi się błąd 404. I tu mój dylemat: czy router powinien zwracać tablice przypasowań dla wszystkich pasujących tras? wtedy dispatcher stwierdziwszy, że nie ma kontrolera o nazwie 'all' sięgnąłby po następny wynik i trafił na właściwy kontroler. Teoretycznie sprawa prosta w działaniu oraz w implementacji, ale czy przy większej ilości tras pasujących do danej ścieżki nie odbiłoby się to na wydajności? Czy ktoś spotkał się z takim routingiem lub może robił coś podobnego...? Piszcie, co o tym myślicie. Pozdrawiam szaleq |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Robisz od nowa to, co już zrobiono z powodzeniem w istniejących frameworkach. Skoro tak bardzo chcesz wynajdywać ponownie koło, to może przeanalizuj istniejące rozwiązania i w ten sposób uzyskasz odpowiedzi na swoje pytania a przy okazji wiele się nauczysz. Żeby daleko nie szukać: Twój routing na razie wygląda identycznie jak zastosowany w Zend Framework.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 11:50 |