在MVC中,控制器和路由器之间有什么区别?


19

它们是同一意思(将URL附加到动作,还是将动作附加到URL)还是我缺少任何区别?

示例:http//github.com/dannyvankooten/PHP-Routerhttp://konstrukt.dk


1
该路由器听起来更像是我的荣耀代理
棘手怪胎

您只需要一个模型(数据库),一个控制器(即路由器)和视图(一个页面)。而已。如果您有一个路由器和一个控制器,那么您已经使其变得复杂了,仅使用路由器将数据传递到控制器。控制器是路由器,但路由器不是控制器。参见此处code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
第一卷

Answers:


15

路由器:

路由是获取URI端点(位于基本URL之后的URI部分)并将其分解为参数以确定应该接收请求的模块,控制器和该控制器的操作的过程。

控制器:

Controller实现了»Controller模式,其中所有请求均被控制器拦截,并根据所请求的URL(即来自Router的路由请求)分配给各个Action Controller。


4

前端-控制器应以协作路由器分派器来决定基于所述(HTTP)请求针对应用哪个具体操作必须被执行,并且然后调度它。

根据设计的详细程度,某些Controller没有Router情况下工作,它们自己进行路由,或者路由在设计中是隐式的,如何处理请求。

一些调度 ş也传递一个请求对象的调度操作方法。然后,操作方法将自己分解为请求,以便即使控制器操作仍可以根据请求进行某些路由。一个典型的例子就是框架提供重定向作为响应的情况。这也显示了路由器控制器之间的相关程度或接近程度。

此处通常得出的区别是,路由负责或帮助确定要执行的操作方法,然后控制器负责提供此操作,但两者均处理请求。

如您所见,路由器控制器之间的差异在实现和框架之间可能会有很大差异。最后,具体的应用程序需要某种级别的抽象是否有用或阻碍了它的发展。

但是从术语上来说,我想说Controller在整个应用程序中扮演着更高的角色。可以这么说是采取行动的地方。


3

路由将URL映射到控制器,这就是动作。有时,根据框架,角色之间的分离不是很好。


2

路由器是控制器层的一部分。路由器处理机制是对旧式前端控制器模式(index.php中的大开关)的替代。

在现代框架中,路由器定义了“可能的”种类的请求与其处理器之间的直接连接。相比之下,控制器仅获取标识信息,并在其自己的上下文中解析此数据。


0

通常,路由器通常基于外部输入(例如GET或POST变量)来完成整个应用程序的行程。

但是,路由器不是MVC的任何部分,几个MVC和HMVC框架都使用路由器,但这不会将它们绑定到MVC的模式。

另外,我见过一些MVC的早期实现,实际上是依靠基于文件的动作分离,每个控制器一个文件来访问单独的控制器。这为应用程序提供了更好的服务,因为有了瘦的控制器和更强大的模型,您无需滚动到控制器中的特定方法,因此可以在一个位置(模型)访问逻辑,从而可以进行组合行为。


-1

路由器采用的

请求

并确定哪个控制器/控制器方法将处理该请求。

控制器接受请求并处理!

现在,我还制作了控制器,用于拆分URL,并将基本URL后的第一部分用作控制器,第二部分用作操作。这将加载与控制器相对应的文件,并在该文件中加载与操作相对应的方法。

这并不是真正的控制器(就MVC而言),它是路由的一部分。

例如,以[GET] uri为例:example.com/article/view/123 MVC路由器将解析uri并找到以下段

article view 123默认情况下,大多数路由器现在将实例化articleController并调用传入的123作为参数的view方法。(您也可以使用一些getUriSegment(segmentIdx)方法,这是您框架的设计选择。)

ArticleController将具有一个带有$ articleId参数的view方法。此方法可能会执行以下操作:获取指定的文章(例如,通过模型从数据库中获取),然后显示该文章(可能通过返回一个视图,该视图赋予模型返回的文章)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.