Ste*_*n-v 2 php url model-view-controller controller url-routing
我目前正在整理一些用于练习的mvc框架,我有一些laravel经验,因此大致基于此。我做了一个路由器,它只是为您设置的网址返回一个指定的视图。
现在,我还制作了控制器,用于拆分URL,并将基本URL后的第一部分用作控制器,第二部分用作操作。这将加载与控制器相对应的文件,并在该文件中加载与操作相对应的方法。
因此,如果url类似于:url.com/users/index,它将加载UsersController.php文件并在该文件中查找index()方法。
现在我想知道控制器和路由器之间的确切区别是什么?它像指定的吗?其中路由器稍微简单一点,并且只对给定的确切网址做出反应,而路由器将其切碎并增加深度?
我目前所拥有的似乎有很多重叠。
小智 7
控制器位于模型和视图之间。它与两者通信以响应请求。
路由器选择哪个控制器(以及该控制器上的哪个方法)处理请求。例如,它可能决定请求“product/view/123”应该调用ProductController的View方法,将 123 作为参数传递。
路由器也可能会转换 url。而不是像你说的那样在 url 中使用方法和动作。您也可以拥有 www.example.com/members。路由器会将其转换为UsersController的Index方法。这允许“漂亮” url 的用户映射到逻辑上很好命名的控制器。
(假设路由器不引用网络硬件或木工工具!)
路由器接受请求,并决定将使用哪种控制器/控制器方法来处理该请求。
控制器接受请求并处理!
现在,我还制作了控制器,用于拆分URL,并将基本URL后的第一部分用作控制器,第二部分用作操作。这将加载与控制器相对应的文件,并在该文件中加载与操作相对应的方法。
这并不是真正的控制器(就MVC而言),它是路由的一部分。
例如,以[GET] uri为例:example.com/article/view/123 MVC路由器将解析uri并找到以下段
默认情况下,大多数路由器现在都会实例化,articleController并调用作为参数view传入的方法123。(您也可以选择某种getUriSegment(segmentIdx)方法,这是您框架的设计选择。)
在ArticleController将有一个view与$方法articleId参数。此方法可能会执行以下操作:获取指定的文章(例如,通过模型从数据库中获取),然后显示该文章(可能是通过返回由模型返回的文章提供的视图)