路由是应用开发中比较关键的一个环节,其主要作用包括但不限于:
* 让URL更规范以及优雅;
* 隐式传入额外请求参数;
* 统一拦截并进行权限检查等操作;
* 绑定请求数据;
* 使用请求缓存;
* 路由中间件支持;
路由解析的过程一般包含:
* 路由定义:完成路由规则的定义和参数设置;
* 路由检测:检查当前的URL请求是否有匹配的路由;
* 路由解析:解析当前路由实际对应的操作(方法或闭包);
* 路由调度:执行路由解析的结果调度;
掌握路由主要是要掌握路由定义及参数设置,其它环节是由系统自动完成的。
>[danger] 路由的主体规划和定义应该尽可能在应用开发前完成,在后期可以进行路由的参数调整和规则增补。
## 路由定义文件
路由规则的注册必须在应用的路由定义文件中完成。路由定义和检测是针对应用的,因此如果你采用的是多应用模式,每个应用的路由都是完全独立的,并且路由地址不能跨应用(除非采用重定向路由)。
>[info] `route`目录下的任何路由定义文件都是有效的,分开多个路由定义文件并没有实际的意义,纯粹出于管理方便而已。默认的路由定义文件是`route.php`,但你完全可以更改文件名,或者添加多个路由定义文件。
~~~php
├─route 路由定义目录
│ ├─route.php 路由定义
│ ├─api.php 路由定义
│ └─... 更多路由定义
~~~
如果你使用了多应用模式,那么路由定义文件则放入应用目录下:
~~~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
```
>[danger] 如果不做特殊说明的话,后面章节的例子都采用单应用模式或者多个入口应用举例,如果你是自动多应用的话请参考上面的实例进行URL地址调整。
## 路由配置文件
路由的配置文件独立为`config`目录下的`route.php`,如果是多应用模式则支持在应用配置的`route.php`设置,请注意路由配置文件和路由定义文件之间的区别。
## 关闭路由
如果你的某个应用不需要使用路由功能,那么可以在应用的`app.php`配置文件中设置:
~~~
// 关闭应用的路由功能
'with_route' => false,
~~~
关闭某个应用的路由。路由关闭后,你只能使用默认的URL解析规则来访问。
- 序言
- 基础
- 安装
- 开发规范
- 目录结构
- 配置
- 架构
- 请求流程
- 架构总览
- 入口文件
- 多应用模式
- URL访问
- 容器和依赖注入
- 服务
- 门面
- 中间件
- 事件
- 路由
- 路由定义
- 变量规则
- 路由地址
- 路由参数
- 路由中间件
- 路由分组
- 资源路由
- 注解路由
- 路由绑定
- 域名路由
- MISS路由
- 跨域请求
- URL生成
- 控制器
- 控制器定义
- 基础控制器
- 空控制器
- 资源控制器
- 控制器中间件
- 请求
- 请求对象
- 请求信息
- 输入变量
- 请求类型
- HTTP头信息
- 伪静态
- 参数绑定
- 请求缓存
- 响应
- 响应输出
- 响应参数
- 重定向
- 文件下载
- 数据库
- 连接数据库
- 分布式数据库
- 查询构造器
- 查询数据
- 添加数据
- 更新数据
- 删除数据
- 查询表达式
- 链式操作
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- cacheAlways
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- 聚合查询
- 分页查询
- 时间查询
- 高级查询
- 视图查询
- JSON字段
- 子查询
- 原生查询
- 获取查询参数
- 查询事件
- 获取器
- 事务操作
- 存储过程
- 数据集
- 数据库驱动
- 模型
- 定义
- 模型字段
- 新增
- 更新
- 删除
- 查询
- 查询范围
- JSON字段
- 获取器
- 修改器
- 搜索器
- 数据集
- 自动时间戳
- 只读字段
- 软删除
- 类型转换
- 模型输出
- 模型事件
- 模型关联
- 一对一关联
- 一对多关联
- 远程一对多
- 远程一对一
- 多对多关联
- 多态关联
- 关联预载入
- 关联统计
- 关联输出
- 虚拟模型
- 视图
- 模板变量
- 视图过滤
- 模板渲染
- 模板引擎
- 视图驱动
- 错误和日志
- 异常处理
- 日志处理
- 调试
- 调试模式
- Trace调试
- SQL调试
- 变量调试
- 远程调试
- 验证
- 验证器
- 验证规则
- 错误信息
- 验证场景
- 路由验证
- 内置规则
- 表单令牌
- 注解验证
- 杂项
- 缓存
- Session
- Cookie
- 多语言
- 上传
- 命令行
- 启动内置服务器
- 查看版本
- 自动生成应用目录
- 创建类库文件
- 清除缓存文件
- 生成数据表字段缓存
- 生成路由映射缓存
- 输出路由定义
- 自定义指令
- Debug输出级别
- 扩展库
- 数据库迁移工具
- Workerman
- think助手工具库
- 验证码
- Swoole
- 附录
- 助手函数
- 升级指导
- 更新日志