# 注冊路由
最基礎的路由定義方法是 在控制器中指定 @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插件