我目前正在组建一个小的mvc框架进行练习,我有一点经验,所以它基于这个松散的基础。我已经制作了一个路由器,它只返回你设置的url的指定视图。
现在我还制作了控制器来拆分网址并使用基本网址后面的第一部分作为控制器,第二部分作为操作。这将加载与控制器对应的文件以及与该操作对应的该文件中的方法。
因此,如果url类似于:url.com/users/index,它将加载UsersController.php文件并在该文件中查找index()方法。
现在我想知道控制器和路由器之间的确切区别?它像一个指定的?其中一个路由器只是稍微简单一些,只是对一个确切的给定网址作出反应,一个路由器将它砍掉并有更深的一点?
我目前所拥有的东西似乎重叠了很多。
答案 0 :(得分:3)
控制器位于模型和视图之间。它与两者通信以对请求做出响应。
路由器选择哪个控制器(以及该控制器上的哪个方法)处理请求。例如,它可能会决定请求'product / view / 123'应该调用 ProductController 的 View 方法,将123作为参数传递。< / p>
路由器也可能会转换网址。而不是像你说的那样使用url中的方法和动作。您也可以访问www.example.com/members。路由器会将其转换为 UsersController 的 Index 方法。这允许'漂亮'网址的用户映射到不错的逻辑命名控制器。
答案 1 :(得分:3)
(假设路由器不是指网络硬件或木工工具!)
路由器接收请求并决定哪个控制器/控制器方法将处理请求。
控制器接受请求并处理它!
现在我还制作了分割网址的控制器,并使用基本网址后面的第一部分作为控制器,第二部分作为操作。这将加载与控制器对应的文件以及与该操作对应的该文件中的方法。
这实际上不是一个控制器(就MVC而言)它是路由的一部分。
例如,参加[GET] uri:example.com/article/view/123 MVC路由器将解析uri并找到以下段
默认情况下,大多数路由器现在都会实例化articleController
,并将view
方法作为参数传入123
。 (您也可以使用一些getUriSegment(segmentIdx)
方法,这是您框架的设计选择。)
ArticleController
将使用view
方法并使用$ articleId
参数。此方法可能会执行以下操作:获取指定的文章(例如,通过模型从数据库中获取)然后显示它(可能通过返回已获得模型返回的文章的视图)
答案 2 :(得分:0)
路由器将请求指向控制器。