Jaka jest różnica w MVC między kontrolerem a routerem?

19

Czy oznaczają to samo (dołączanie adresów URL do akcji lub działania do adresów URL), czy też jest jakaś różnica, której mi brakuje?

Przykład: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk

thelolcat
źródło
1
ten router brzmi dla mnie jak uwielbiony serwer proxy
maniak ratchet,
Potrzebujesz tylko modelu (bazy danych), kontrolera (który jest routerem) i widoku (strony). Otóż ​​to. Jeśli masz router i kontroler, to nadmiernie go skomplikowałeś i po prostu używasz routera do przesyłania danych do kontrolera. Kontroler jest routerem, ale router nie jest kontrolerem. Zobacz tutaj code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
tom pierwszy

Odpowiedzi:

15

Router:

Routing to proces pobierania punktu końcowego URI (tej części URI, który pojawia się po podstawowym adresie URL) i rozkładania go na parametry w celu ustalenia, który moduł, kontroler i działanie tego kontrolera powinny otrzymać żądanie.

Kontroler:

Kontroler implementuje »wzorzec kontrolera, w którym wszystkie żądania są przechwytywane przez kontroler i wysyłane do poszczególnych kontrolerów akcji na podstawie żądanego adresu URL (czyli żądania routingu z routera).

Sam T.
źródło
4

Frontend kontroler powinien współpracować z routerem i dyspozytora do decydowania na podstawie (HTTP) wniosek przeciwko stosowaniu których beton Akcja ma być wykonany, a następnie wysyła go.

W zależności od tego, jak jest szczegółowy projekt, niektóre kontrolera s praca bez Router s i robią swoje własne routingu lub rutowania jest ukryte w projektowaniu jak żądanie jest przetwarzane.

Niektóre Dyspozytor y również przekazać żądania obiektu do wywoływane metody działania . Action-Metody następnie rozkładają sobie za Zamówienie w części tak, że nawet Controller działania nadal może zrobić jakiś Routing na podstawie wniosku. Typowym przykładem tego jest przypadek, gdy platforma oferuje przekierowanie jako odpowiedź. To pokazuje również, jak powiązane lub w pobliżu routera i kontrolera są.

Różnica, która jest zwykle rysowana tutaj, polega na tym, że routing zajmuje się lub pomaga w określeniu, która metoda akcji ma zostać wykonana, a kontroler jest wówczas odpowiedzialny za wykonanie tej akcji, ale obie obsługują żądanie.

Jak widać, różnice między routerem a kontrolerem mogą się znacznie różnić między implementacjami a strukturami. W końcu konkretna aplikacja ma swoje potrzeby, niezależnie od tego, czy określony poziom abstrakcji jest użyteczny, czy przeszkadza.

Jednak z warunków powiedziałbym, że kontroler odgrywa większą rolę w ogólnej aplikacji. To, co mówi akcja.

hakre
źródło
3

Trasa mapuje adres URL do kontrolera, który jest akcją. Czasami role nie są tak naprawdę dobrze rozdzielone, w zależności od frameworka.

Kevin
źródło
2

Routery są częścią warstwy kontrolera. Mechanizm przetwarzania routera jest zamiennikiem starej szkoły kontrolera Front Controller (dużego przełącznika w pliku index.php).

W nowoczesnej strukturze router określa bezpośrednie połączenie między „rodzajem” możliwych żądań a jego procesorem. Natomiast administrator uzyskuje tylko informacje identyfikujące i analizuje te dane we własnym kontekście.

Dávid Horváth
źródło
0

Po prostu router wykonuje podróż przez aplikację, zwykle na podstawie danych zewnętrznych, takich jak zmienne GET lub POST.

Router nie jest jednak żadną częścią MVC, kilka platform MVC i HMVC używa routerów, ale to nie wiąże ich ze wzorcem MVC.

Dodatkowo kilka wczesnych wdrożeń MVC, które widziałem, polegało na opartym na plikach rozdzieleniu działań z jednym plikiem na kontroler w celu uzyskania dostępu do oddzielnych kontrolerów. Służy to aplikacji znacznie lepiej, ponieważ dzięki chudym kontrolerom z bardziej niezawodnymi modelami nigdy nie trzeba przewijać do konkretnej metody w kontrolerze, a zatem można uzyskać dostęp do logiki w jednym miejscu (modelu), co pozwala na kompozycję zachowania

MrMesees
źródło
-1

Router bierze

żądanie

i decyduje, które metody kontrolera / kontrolera obsłużą żądanie.

Kontroler przyjmuje żądania i obsługuje je!

Teraz stworzyłem również kontroler, który dzieli adres URL i wykorzystuje pierwszą część po adresie podstawowym jako kontroler, a drugą część jako akcję. Spowoduje to załadowanie pliku odpowiadającego kontrolerowi i metody w tym pliku odpowiadającej akcji.

To nie jest tak naprawdę kontroler (jeśli chodzi o MVC), to część routingu.

Na przykład weź [GET] uri: przyklad.com/article/view/123 Router MVC przeanalizuje uri i znajdzie następujące segmenty

widok artykułu 123 Domyślnie większość routerów tworzy teraz instancję articleController i wywołuje metodę widoku przekazując 123 jako parametr. (Alternatywnie możesz mieć metodę getUriSegment (segmentIdx), to wybór projektu dla twojego frameworka).

ArticleController miałby metodę widoku z parametrem $ articleId. Ta metoda prawdopodobnie zrobiłaby coś takiego: pobrać określony artykuł (na przykład z bazy danych przez model), a następnie wyświetlić go (prawdopodobnie poprzez zwrócenie widoku, który otrzymał artykuł zwrócony przez model

Siddarth Nyati
źródło