它们是同一意思(将URL附加到动作,还是将动作附加到URL)还是我缺少任何区别?
示例:http://github.com/dannyvankooten/PHP-Router与http://konstrukt.dk
它们是同一意思(将URL附加到动作,还是将动作附加到URL)还是我缺少任何区别?
示例:http://github.com/dannyvankooten/PHP-Router与http://konstrukt.dk
Answers:
甲前端-控制器应以协作路由器和分派器来决定基于所述(HTTP)请求针对应用哪个具体操作必须被执行,并且然后调度它。
根据设计的详细程度,某些Controller在没有Router的情况下工作,它们自己进行路由,或者路由在设计中是隐式的,如何处理请求。
一些调度 ş也传递一个请求对象的调度操作方法。然后,操作方法将自己分解为请求,以便即使控制器操作仍可以根据请求进行某些路由。一个典型的例子就是框架提供重定向作为响应的情况。这也显示了路由器和控制器之间的相关程度或接近程度。
此处通常得出的区别是,路由负责或帮助确定要执行的操作方法,然后控制器负责提供此操作,但两者均处理请求。
如您所见,路由器和控制器之间的差异在实现和框架之间可能会有很大差异。最后,具体的应用程序需要某种级别的抽象是否有用或阻碍了它的发展。
但是从术语上来说,我想说Controller在整个应用程序中扮演着更高的角色。可以这么说是采取行动的地方。
路由器是控制器层的一部分。路由器处理机制是对旧式前端控制器模式(index.php中的大开关)的替代。
在现代框架中,路由器定义了“可能的”种类的请求与其处理器之间的直接连接。相比之下,控制器仅获取标识信息,并在其自己的上下文中解析此数据。
该路由器采用的
请求
并确定哪个控制器/控制器方法将处理该请求。
控制器接受请求并处理!
现在,我还制作了控制器,用于拆分URL,并将基本URL后的第一部分用作控制器,第二部分用作操作。这将加载与控制器相对应的文件,并在该文件中加载与操作相对应的方法。
这并不是真正的控制器(就MVC而言),它是路由的一部分。
例如,以[GET] uri为例:example.com/article/view/123 MVC路由器将解析uri并找到以下段
article view 123默认情况下,大多数路由器现在将实例化articleController并调用传入的123作为参数的view方法。(您也可以使用一些getUriSegment(segmentIdx)方法,这是您框架的设计选择。)
ArticleController将具有一个带有$ articleId参数的view方法。此方法可能会执行以下操作:获取指定的文章(例如,通过模型从数据库中获取),然后显示该文章(可能通过返回一个视图,该视图赋予模型返回的文章)