框架路由解析
前言
使用框架写过项目的肯定都使用过路由,使用路由来进行接口的管理,那么为什么要使用路由呢!
使用路由会保护项目的真实请求路径。
使请求地址更加规范和简洁,在开发过程中方法名有时候会很长,就可以直接使用路由进行简洁处理。
可以统一对请求请求进行拦截并且进行权限检查的操作。
并且在5.1版本支持了注解路由,方便在开发的过程中进行调试。
方便直接对请求进行缓存,并且还支持了路由中间件。
接下来咔咔会对路由的方方面面进行全面的解析,并且会给大家带上脑图方便大家最直观的预览。
一、路由初识化简单分析
在框架执行流程那一篇文章中,都知道路由初始化是在初始化应用那个过程中执行的。
然后进入到routeInit这个方法,进行代码解析。
来到这个方法先看代码注释,注释为导入路由定义规则。
这段代码的全部我给复制出来了,接下来就是对这段代码进行解析。
/** * 路由初始化 导入路由定义规则 * @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会返回指定目录的文件并且用数组形式返回。
这里返回结果有三个,第一个为当前目录,第二个为父级目录。这俩个数据不用过多追究。
接着就会将route目录下存在php结尾的文件给导入进来,也就是route.php文件。
当把路由文件导入进来之后,进行了一次判断然后进行导入规则。
但是在路由文件可以看到是没有返回任何数据的。
路由文件的return演示
那么这里的return是干嘛的呢!在5.1版本之前是没有这一操作的,但是在5.1是存在的,接下来咔咔给大家演示一下这个使用方法。
首先在路由文件的return中配置一条数据。
然后在index文件中创建一个新的方法vpn
此时可以直接访问路由vpn即可。
当route文件的return存在的数据的时候,就会执行到$this->route->import($rules);这一步,本节暂时不对这里做出探讨,会在后文中大家详细说明。