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

不言
发布: 2018-08-01 11:10:16
原创
3708人浏览过

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

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

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

下面给出了一个简单的路由器类,可以大致阐明路由器是如何工作的。然而在实际项目中,路由器要比下面的示例路由器复杂很多,因为它必须处理更多的东西。

<?php

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免费学习笔记(深入)”;

<?php

// index.php

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['/]();
        }
    }
}

/* 创建 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/greetings
http://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中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号