ThinkPHP路由源码解析(一)(1)

简介: ThinkPHP路由源码解析(一)

框架路由解析



前言

使用框架写过项目的肯定都使用过路由,使用路由来进行接口的管理,那么为什么要使用路由呢!


使用路由会保护项目的真实请求路径。


使请求地址更加规范和简洁,在开发过程中方法名有时候会很长,就可以直接使用路由进行简洁处理。


可以统一对请求请求进行拦截并且进行权限检查的操作。


并且在5.1版本支持了注解路由,方便在开发的过程中进行调试。


方便直接对请求进行缓存,并且还支持了路由中间件。


接下来咔咔会对路由的方方面面进行全面的解析,并且会给大家带上脑图方便大家最直观的预览。

image.png



一、路由初识化简单分析

在框架执行流程那一篇文章中,都知道路由初始化是在初始化应用那个过程中执行的。


image.png


然后进入到routeInit这个方法,进行代码解析。


来到这个方法先看代码注释,注释为导入路由定义规则。


这段代码的全部我给复制出来了,接下来就是对这段代码进行解析。


image.png


/**
     * 路由初始化 导入路由定义规则
     * @access public
     * @return void
     */
    public function routeInit()
    {
        // 路由检测
        // scandir:返回置顶目录的文件数组形式
        $files = scandir($this->routePath);
        foreach ($files as $file) {
            if (strpos($file, '.php')) {
                $filename = $this->routePath . $file;
                // 导入路由配置
                $rules = include $filename;
                if (is_array($rules)) {
                    $this->route->import($rules);
                }
            }
        }
        if ($this->route->config('route_annotation')) {
            // 自动生成路由定义
            if ($this->appDebug) {
                $suffix = $this->route->config('controller_suffix') || $this->route->config('class_suffix');
                $this->build->buildRoute($suffix);
            }
            $filename = $this->runtimePath . 'build_route.php';
            if (is_file($filename)) {
                include $filename;
            }
        }
    }


首先会获取route目录下的文件,函数scandir会返回指定目录的文件并且用数组形式返回。


这里返回结果有三个,第一个为当前目录,第二个为父级目录。这俩个数据不用过多追究。


image.png

image.png



接着就会将route目录下存在php结尾的文件给导入进来,也就是route.php文件。


image.png


当把路由文件导入进来之后,进行了一次判断然后进行导入规则。


但是在路由文件可以看到是没有返回任何数据的。


image.png


路由文件的return演示


那么这里的return是干嘛的呢!在5.1版本之前是没有这一操作的,但是在5.1是存在的,接下来咔咔给大家演示一下这个使用方法。


首先在路由文件的return中配置一条数据。


image.png


然后在index文件中创建一个新的方法vpn


image.png


此时可以直接访问路由vpn即可。


image.png


当route文件的return存在的数据的时候,就会执行到$this->route->import($rules);这一步,本节暂时不对这里做出探讨,会在后文中大家详细说明。



相关文章
|
1天前
PandasTA 源码解析(二十三)
PandasTA 源码解析(二十三)
7 0
|
1天前
PandasTA 源码解析(二十二)(3)
PandasTA 源码解析(二十二)
5 0
|
1天前
PandasTA 源码解析(二十二)(2)
PandasTA 源码解析(二十二)
9 2
|
1天前
PandasTA 源码解析(二十二)(1)
PandasTA 源码解析(二十二)
6 0
|
1天前
PandasTA 源码解析(二十一)(4)
PandasTA 源码解析(二十一)
7 1
|
1天前
PandasTA 源码解析(二十一)(3)
PandasTA 源码解析(二十一)
6 0
|
1天前
PandasTA 源码解析(二十一)(1)
PandasTA 源码解析(二十一)
8 2
|
1天前
PandasTA 源码解析(二十)(1)
PandasTA 源码解析(二十)
7 0
|
1天前
PandasTA 源码解析(十九)(3)
PandasTA 源码解析(十九)
8 2
|
1天前
PandasTA 源码解析(十九)(1)
PandasTA 源码解析(十九)
7 0

推荐镜像

更多