【问题标题】:Difference between controller and router?控制器和路由器的区别?
【发布时间】:2015-03-12 02:19:58
【问题描述】:

我目前正在整理一个小的 mvc 框架来练习,我有一点 laravel 经验,所以它是基于它松散的。我制作了一个路由器,它只为您设置的 url 返回一个指定的视图。

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

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

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

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

【问题讨论】:

  • Router - 定义了如何解析请求数据。控制器 - 接受解析的请求并生成响应。
  • 正是 zerk 上面所说的。路由器本质上将“运行”与 url - site.com/CONTROLLER/METHOD 关联的控制器方法。路由器的工作就是将请求路由到请求的控制器/方法,而控制器将“控制”并进行处理/生成响应。
  • 那么路由器是否也负责分割 url 并将控制器分配给 $controller 变量并将方法分配给 $action 变量?
  • 我投票结束这个问题,因为它是关于两个完全不同的术语之间的差异。
  • 这不是题外话,问题是询问两个密切相关的功能。

标签: php url model-view-controller controller url-routing


【解决方案1】:

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

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

路由器也可能会转换 url。而不是像你说的那样在 url 中使用方法和操作。您还可以拥有 www.example.com/members。路由器会将其转换为 UsersControllerIndex 方法。这允许“漂亮” url 的用户映射到逻辑上命名良好的控制器。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    1. 文章
    2. 查看
    3. 123

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-03-30
        • 2019-01-18
        • 2014-12-15
        • 2023-03-22
        • 2014-02-21
        • 1970-01-01
        • 2023-03-27
        • 2017-03-05
        • 1970-01-01
        相关资源
        最近更新 更多