• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php MVC 框架中的路由器(Router)是如何工作的(附代码)

php 搞代码 3年前 (2022-01-21) 20次浏览 已收录 0个评论

本篇文章给大家带来的文章是关于php MVC 框架中的路由器(Router)是如何工作的(附代码),内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。

说明: 貌似 SF 译文类别出 BUG,所以本文以原创类别给出。

MVC 路由器(Router)或分发器(Dispatcher)会检测 HTTP 请求的 URL,并尝试将单个 URL 组件与控制器和控制器中定义的方法匹配,同时将所有参数传入方法中。

下面给出了一个简单的路由器类,可以大致阐明路由器是如何工作的。然而在实际项目中,路由器

4本文¥来源gao!%daima.com搞$代*!码$网9

搞代gaodaima码

要比下面的示例路由器复杂很多,因为它必须处理更多的东西。

<?phpclass SimpleRouter{    // 路由数组,存储我们定义的路由    private $routes;    // 这个方法用于将定义的路由加入到 $routes 数组    function add_route($route, callback $closure)    {        $this->routes[$route] = $closure;    }    // 执行特定的路由    function execute()    {        $path = $_SERVER['PATH_INFO'];        /**        * 检测给定路由是否被定义,        * 或者执行默认的 '/' 首页路由。        */        if (array_key_exists($path, $this->route)) {            $this->route[$path]();        } else {            $this->route['/]();        }    }}

SimpleRouter 类是 MVC 路由器的简化模型。它的主要功能是将用户定义的每个路由添加到数组中,并执行它。要理解它是如何工作的,请将下面的代码复制到 index.php 文件中。

<?php// index.phpclass SimpleRouter{    // 路由数组,存储我们定义的路由    private $routes;    // 这个方法用于将定义的路由加入到 $routes 数组    function add_route($route, callback $closure)    {        $this->routes[$route] = $closure;    }    // 执行特定的路由    function execute()    {        $path = $_SERVER['PATH_INFO'];        /**        * 检测给定路由是否被定义,        * 或者执行默认的 '/' 首页路由。        */        if (array_key_exists($path, $this->route)) {            $this->route[$path]();        } else {            $this->route['/]();        }    }}/* 创建 Router 实例 */$router = new SimpleRouter(); /* 添加首页闭包值路由器 */$router->add_route('/', function(){    echo 'Hello World';}); /* 添加另一个闭包路由 */$router->add_route('/greetings', function(){    echo 'Greetings, my fellow men.';}); /* 添加可回调函数作为路由 */$router->add_route('/callback', 'myFunction');  /* 回调函数处理程序 */function myFunction(){    echo "This is a callback function named '" .  __FUNCTION__ ."'";}/* 执行路由 */$router->execute();

现在到浏览器访问下列 url:

http://localhost/index.php/http://localhost/index.php/greetingshttp://localhost/index.php/callback

对于每个 url,你应该会看到在我们的路由中定义的不同消息。那么路由器是如何工作的呢?

在我们的示例中,add_route 方法将 url 的路径名(route)添加到路由数组,并且定义对应的处理操作。这个处理操作可以是一个简单的函数或者回调函数,作为闭包传入。现在当我们执行路由器的 execute 方法时,它会检测在当前 &dollar;routes 数组中是否匹配到路由,如果有,则执行这个函数或回调函数。

如果你使用 var_dump 这个 &dollar;routes 数组,你可以看到数组的具体内容。对于每个定义的路由都存储一个闭包与其关联。

array (size=3)  '/' =>     object(Closure)[2]  '/greetings' =>     object(Closure)[3]  '/callback' => string 'myFunction' (length=10)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php MVC 框架中的路由器(Router)是如何工作的(附代码)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址