En MVC, ¿cuál es la diferencia entre el controlador y el enrutador?

19

¿Significan lo mismo (adjuntar URL a acciones o acciones a URL) o hay alguna diferencia que me falta?

Ejemplo: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk

thelolcat
fuente
1
que los sonidos del router más como un proxy glorificado a mí
monstruo de trinquete
Solo necesita un modelo (base de datos), un controlador (que es el enrutador) y la vista (una página). Eso es. Si tiene un enrutador y un controlador, lo ha complicado demasiado y solo está utilizando el enrutador para pasar datos a un controlador. Un controlador es un enrutador, pero un enrutador no es un controlador. Vea aquí code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
volumen uno

Respuestas:

15

Enrutador:

El enrutamiento es el proceso de tomar un punto final URI (esa parte del URI que viene después de la URL base) y descomponerlo en parámetros para determinar qué módulo, controlador y acción de ese controlador debe recibir la solicitud.

Controlador:

El controlador implementa un »patrón de controlador, en el que todas las solicitudes son interceptadas por el controlador y enviadas a controladores de acción individuales en función de la URL solicitada (es decir, la solicitud de enrutamiento del enrutador).

Sam T
fuente
4

Un controlador frontend debe colaborar con un enrutador y un despachador para decidir, basándose en la solicitud (HTTP) contra la aplicación, qué acción concreta debe ejecutarse y luego la envía.

Dependiendo de cómo se detalla un diseño es, algunos Controlador s trabajo sin Router s y lo hacen el encaminamiento por cuenta propia o el enrutamiento está implícito en el diseño de cómo se procesa la solicitud.

Algunos Dispatcher s también pasan una solicitud de objeto al despachados métodos de acción . Acción-Métodos continuación, se descomponen a sí mismos la solicitud , en parte, de modo que incluso Controlador acciones aún pueden hacer algunos enrutamiento basado en la petición. Un ejemplo típico de esto es el caso cuando un marco ofrece hacer una redirección como respuesta. Esto también muestra cuán relacionados o cercanos están el enrutador y el controlador .

La diferencia que normalmente se dibuja aquí es que el enrutamiento se encarga o ayuda a identificar qué método de acción ejecutar y el controlador es responsable de proporcionar esta acción, pero ambos manejan la solicitud.

Como puede ver, las diferencias entre el enrutador y el controlador pueden variar mucho entre implementaciones y marcos. Al final, la aplicación concreta tiene sus necesidades, ya sea que un cierto nivel de abstracción sea o no útil o se interponga en el camino.

Sin embargo, según los términos, diría que Controller tiene un papel más importante en la aplicación general. Aquí es donde va la acción, por así decirlo.

hakre
fuente
3

La ruta asigna una URL a un controlador, que es la acción. A veces, los roles no se separan realmente bien según el marco.

Kevin
fuente
2

Los enrutadores son parte de la capa del controlador. El mecanismo de procesamiento del enrutador es un reemplazo del patrón de controlador frontal de la vieja escuela (el gran interruptor en el index.php).

En un marco moderno, un enrutador define una conexión directa entre un "tipo" de posibles solicitudes y su procesador. Por el contrario, un controlador solo obtiene información de identificación y analiza estos datos en su propio contexto.

Dávid Horváth
fuente
0

Simplemente, un enrutador realiza un recorrido a través de la aplicación, generalmente basado en entradas externas, como las variables GET o POST.

Sin embargo, un enrutador no es parte de un MVC, varios marcos MVC y HMVC usan enrutadores, pero esto no los une al patrón de MVC.

Además, varias implementaciones tempranas de MVC que he visto en realidad se basaban en la separación de acciones basada en archivos con un archivo por controlador para acceder a controladores separados. Esto sirve mucho mejor a la aplicación, porque al tener controladores delgados, con modelos más robustos, nunca tiene que desplazarse a un método particular en el controlador y, por lo tanto, puede acceder a la lógica en un lugar (el modelo), lo que le permite componer comportamientos

MrMesees
fuente
-1

El enrutador toma el

solicitud

y decide qué controlador / métodos de controlador manejarán la solicitud.

¡El controlador acepta las solicitudes y lo maneja!

Ahora también he creado un controlador que divide la url y usa la primera parte después de la url base como controlador y la segunda parte como acción. Esto carga un archivo correspondiente con el controlador y un método dentro de ese archivo correspondiente con la acción.

Esto no es realmente un controlador (en lo que respecta a MVC) es parte del enrutamiento.

Por ejemplo, tome la uri [GET]: example.com/article/view/123 El enrutador MVC analizará la uri y encontrará los siguientes segmentos

vista de artículo 123 De forma predeterminada, la mayoría de los enrutadores ahora crearían una instancia de articleController y llamarían a su método de vista pasando 123 como parámetro. (Alternativamente, podría tener algún método getUriSegment (segmentoIdx), esa es una opción de diseño para su marco.)

El ArticleController tendría un método de visualización con un parámetro $ articleId. Este método probablemente haría algo como: obtener el artículo especificado (de una base de datos a través de un modelo, por ejemplo) y luego mostrarlo (probablemente devolviendo una vista que le ha dado el artículo devuelto por el modelo

Siddarth Nyati
fuente