# 注册路由
最基础的路由定义方法是 在控制器中指定 @RestController 注解:
>[danger] 要使用`Route`类注册路由必须首先在路由定义文件开头添加引用 **(后面不再重复说明)**
> ~~~
> use ESD\Plugins\EasyRoute\Annotation\RestController;
> ~~~
~~~
<?php
namespace ESD\Examples\Controller;
use ESD\Go\GoController;
use ESD\Plugins\EasyRoute\Annotation\RestController;
/**
* @RestController("user")
*/
class CUser extends GoController{
}
~~~
>[info] 由于路由需要框架启动前就进行解析,所以框架需要扫描标记了@RestController 的类进行注册路由规则。如果你忘记在控制器上使用用该注解,以下相关路由规则均无效。
例如注册如下路由规则:
~~~
/**
* 声明控制器里需要解析路由规则
* @RestController()
*/
class Index extends GoController {
/**
* 设置一个主页路由
* @GetMapping("/")
* @return string
*/
public function test()
{
return "hello";
}
}
~~~
我们访问:
~~~
http://serverName:8080/
~~~
会自动路由到:
~~~
Index 类的 test 方法
~~~
我们看到方法的注释中有 `@GetMapping`方法,表示这是指定请求类型为GET的,如果请求的非GET类型,则系统会抛出http 400 bad request。
请求类型的快捷方法,还包括:
| 类型 | 描述 | 快捷方法 |
| --- | --- | --- |
| GET | GET请求 | @GetMapping|
| POST | POST请求 | @PostMapping|
| 其他请求| 通过参数method={"put","delete"}} | @RequestMapping|
如:
~~~
**
* @RequestMapping(method={"put","delete"})
* @return string
*/
public function test5(){
return "hello";
}
~~~
# 路由表达式
路由表达式统一使字符串定义,采用规则定义的方式(不支持直接使用正则表达式,但支持给某个变量定义正则,参考后面的变量规则部分)。
## 规则表达式
规则表达式通常包含静态规则和动态规则,以及两种规则的结合,例如下面都属于有效的规则表达式:
默认情况下,`*Mapping`使用一种语法,其中`{foo}`指定一个名为`foo`的占位符并匹配正则表达式\[^ /\] +`。要调整占位符匹配的模式,可以通过编写`{bar:\[0-9\] +}`来指定自定义模式。一些例子:
~~~
// 匹配 /user/42, 不匹配 /user/xyz
@GetMapping("/user/{id:\d+}")
// 匹配 /user/foobar, 不匹配 /user/foo/bar
@GetMapping("/user/{name}")
// 匹配 /user/foo/bar as well
@GetMapping("/user/{name:.+}")
~~~
## 可选变量
路径占位符的自定义模式无法使用捕获组。例如,`{lang:(en|de)}`不是有效的占位符,因为`()`是一个捕获组。相反,你可以使用`{lang:en|de}`或`{lang:(?:en|de)}`。
此外,`[...]`中包含的路径部分被认为是可选的,因此/ foo \[bar\]将匹配/ foo和/ foobar。**可选部件仅支持在尾随位置**,而不是在路径中间。
~~~
//比如这条规则
@GetMapping("/user/{id:\d+}[/{name}]")
// 相当于下面两条规则
@GetMapping("/user/{id:\d+}")
@GetMapping("/user/{id:\d+}/{name}")
// 也可以使用多个嵌套的可选部件
@GetMapping("/user[/{id:\d+}[/{name}]]")
// 此路由无效,因为可选部件只能在最后发生
@GetMapping("/user[/{id:\d+}]/{name}")
~~~
- 前言
- 捐赠ESD项目
- 使用篇-通用
- 环境
- 安装
- 规范
- 压力测试
- 配置
- 如何设置YML配置
- server配置
- 端口配置
- 项目结构
- 事件派发
- 日志
- 注解
- DI容器
- 自定义进程
- 并发及协程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事务
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 静态文件
- 路由定义
- 修饰方法
- 路由分组
- 资源路由
- 端口作用域
- 异常处理
- 跨域请求
- 路由缓存
- 控制器
- 控制器初始化
- 前置操作
- 跳转和重定向
- 异常处理
- 请求
- 请求对象
- 请求信息
- request消息
- response消息
- stream消息
- url接口
- 验证器
- 内置验证器
- 内置过滤器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服务篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式链路追踪系统
- Consul插件