控制器和路由器的区别?

Difference between controller and router?

我目前正在整理一个小的 mvc 框架进行练习,我有一些 laravel 经验,所以它大致基于此。我制作了一个路由器,它只是 returns 您设置的 url 的指定视图。

现在我还制作了控制器,它拆分 url 并使用基础 url 之后的第一部分作为控制器,第二部分作为动作。这将加载与控制器对应的文件以及该文件中与操作对应的方法。

因此,如果 url 类似于:url.com/users/index 它将加载一个 UsersController.php 文件并在该文件中查找 index() 方法。

现在我想知道控制器和路由器之间的确切区别是什么?它像指定的吗?其中路由器稍微简单一点,只对给定的确切内容做出反应 url,而路由器将其切碎并具有更多深度?

我目前拥有的东西似乎有很多重叠。

控制器位于模型和视图之间。它与两者通信以响应请求。

路由器选择哪个控制器(以及该控制器上的哪个方法)处理请求。例如,它可能决定请求 'product/view/123' 应该调用 ProductControllerView 方法,将 123 作为 参数传递.

路由器也可能转换 urls。而不是像您所说的那样使用 url 中的方法和操作。你也可以有 www.example.com/members。路由器会将其转换为 UsersControllerIndex 方法。这允许 'pretty' url 的用户映射到合理命名的控制器。

路由器将请求指向控制器。

(假设路由器不是指网络硬件或木工工具!)

路由器接受请求并决定哪些 controller/controller 方法将处理请求。

控制器接受请求并处理它!

Now I've also made controller that splits the url and uses the first part after the base url as controller and second part as action. This loads a file corresponding with the controller and a method within that file corresponding with the action.

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

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

  1. 文章
  2. 查看
  3. 123

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

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