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
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
Odpowiedzi:
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).
źródło
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.
źródło
Trasa mapuje adres URL do kontrolera, który jest akcją. Czasami role nie są tak naprawdę dobrze rozdzielone, w zależności od frameworka.
źródło
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.
źródło
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
źródło
Router bierze
żądanie
i decyduje, które metody kontrolera / kontrolera obsłużą żądanie.
Kontroler przyjmuje żądania i obsługuje je!
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
źródło