我目前正在为实践准备一个mvc框架,我有一些laravel经验,所以它是基于此松散的。我制作了一个路由器,它只返回您设置的url的指定视图。
现在,我还制作了一个控制器,它拆分url,并使用基url后面的第一部分作为控制器,第二部分作为操作。这将加载与控制器相对应的文件,并在该文件中加载与操作对应的方法。
因此,如果url类似于:url.com/user/index,它将加载一个UsersController.php文件,并在该文件中查找index()方法。
现在我想知道控制器和路由器到底有什么区别吗?它就像一个特定的?其中一个路由器只是有点简单,只是对一个确切的给定url和路由器的反应,并将其分割,并有更多的深度?
我目前所拥有的似乎有相当多的重叠。
发布于 2015-01-13 17:34:01
控制器位于模型和视图之间。它与双方进行通信,以便对请求作出答复。
路由器选择哪个控制器(以及该控制器上的哪个方法)处理请求。例如,它可能决定请求'product/ View / 123‘应该调用ProductController的View方法,将123作为参数传递。
路由器也可以转换urls。而不是像你说的那样,在url中使用方法和操作。您也可以访问www.example.com/members。路由器会将其转换为UsersController的Index方法。这允许“漂亮”urls的用户映射到逻辑上很好的控制器。
发布于 2015-02-27 09:14:24
(假定路由器不涉及网络硬件或木头工作工具!)
路由器接收请求,并决定哪些控制器/控制器方法将处理请求。
控制器接受请求并处理它!
现在,我还制作了一个控制器,它拆分url,并使用基url后面的第一部分作为控制器,第二部分作为操作。这将加载与控制器相对应的文件,并在该文件中加载与操作对应的方法。
这并不是真正的控制器(就MVC而言),它是路由的一部分。
例如,以GET uri: example.com/ parse /view/123为例,MVC路由器将解析uri并找到以下部分
默认情况下,大多数路由器现在会实例化articleController
并调用它的view
方法,作为参数传入123
。(您也可以使用一些getUriSegment(segmentIdx)
方法,这是框架的设计选择。)
ArticleController
将有一个带有$articleId
参数的view
方法。此方法可能会执行如下操作:获取指定的项目(例如,从db通过模型),然后显示它(可能是通过返回模型返回的项目的视图)。
发布于 2015-01-13 17:36:32
路由器将请求指向控制器。
https://stackoverflow.com/questions/27933802
复制