说明: 貌似 SF 译文类别出 BUG,所以本文以原创类别给出。
MVC 路由器(Router)或分发器(Dispatcher)会检测 HTTP 请求的 URL,并尝试将单个 URL 组件与控制器和控制器中定义的方法匹配,同时将所有参数传入方法中。
下面给出了一个简单的路由器类,可以大致阐明路由器是如何工作的。然而在实际项目中,路由器要比下面的示例路由器复杂很多,因为它必须处理更多的东西。
?phphtml' target='_blank'>class 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
/* 执行路由 */$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)
执行处理由以下几行完成。 dollar;this- routes[$path]** 语句返回一个闭包,该闭包保存在 **/$routes 数组中,用于指定路由的执行,注意语句结尾处的 ()。
$this- routes[$path]();$this- routes[ / ]();
上面的示例简单地演示了路由器的工作原理,为了简单起见,我们没有处理任何错误,也没有考虑路由的安全性问题。
相关推荐:
PHP MVC框架路由学习笔记,mvc框架路由学习笔记
PHP学习MVC框架之路由
以上就是php MVC 框架中的路由器(Router)是如何工作的(附代码)的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答