路由是应用开发中比较关键的一个环节,其主要作用包括但不限于:
- 让URL更规范以及优雅;
- 隐式传入额外请求参数;
- 统一拦截并进行权限检查等操作;
- 绑定请求数据;
- 使用请求缓存;
- 路由中间件支持;
路由解析的过程一般包含:
- 路由定义:完成路由规则的定义和参数设置;
- 路由检测:检查当前的URL请求是否有匹配的路由;
- 路由解析:解析当前路由实际对应的操作(方法或闭包);
- 路由调度:执行路由解析的结果调度;
掌握路由主要是要掌握路由定义及参数设置,其它环节是由系统自动完成的。
路由的主体规划和定义应该尽可能在应用开发前完成,在后期可以进行路由的参数调整和规则增补。
路由定义文件
路由规则的注册必须在应用的路由定义文件中完成。路由定义和检测是针对应用的,因此如果你采用的是多应用模式,每个应用的路由都是完全独立的,并且路由地址不能跨应用(除非采用重定向路由)。
route
目录下的任何路由定义文件都是有效的,分开多个路由定义文件并没有实际的意义,纯粹出于管理方便而已。默认的路由定义文件是route.php
,但你完全可以更改文件名,或者添加多个路由定义文件。
├─route 路由定义目录
│ ├─route.php 路由定义
│ ├─api.php 路由定义
│ └─... 更多路由定义
如果你使用了多应用模式,那么路由定义文件则放入应用目录下:
├─app 应用目录
│ ├─app_name 应用目录
│ │ ├─common.php 函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ ├─route 路由目录
│ │ │ ├─route.php 路由定义
│ │ │ ├─api.php 路由定义
│ │ │ └─... 更多路由定义
多应用模式下面,如果你开启了自动多应用,路由的规则是指在URL地址的应用名之后的部分,也就是说URL中的应用名是不能省略和改变的,例如你在index
应用中定义了路由。
Route::rule('hello/:name', 'index/hello');
在没有开启自动多应用的情况下,URL地址是
http://serverName/index.php/hello/think
一旦你开启了自动多应用,那么实际的URL地址应该是
http://serverName/index.php/index/hello/think
如果不做特殊说明的话,后面章节的例子都采用单应用模式或者多个入口应用举例,如果你是自动多应用的话请参考上面的实例进行URL地址调整。
路由配置文件
路由的配置文件独立为config
目录下的route.php
,如果是多应用模式则支持在应用配置的route.php
设置,请注意路由配置文件和路由定义文件之间的区别。
关闭路由
如果你的某个应用不需要使用路由功能,那么可以在应用的app.php
配置文件中设置:
// 关闭应用的路由功能
'with_route' => false,
关闭某个应用的路由。路由关闭后,你只能使用默认的URL解析规则来访问。