💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 1.3 创建路由 ## 1.3.1 路由定义 XPHP 内置了一个高效、简洁、完整、易用的路由,支持多种方式调用。 路由,顾名思义,就是把访问的URI(REQUEST_URI)映射(Map)到各个控制器(Controller)上。 ## 1.3.2 静态Json路由 在 `/Var/Route/` 目录下存放静态路由。 静态路由支持Json格式。每一个路由为一个文件,命名规则:`应用名.json`。(其实只要后缀名是json就行,没有其他要求) ### 1.3.2.1 一个标准的路由: ```json [ { "base" : "/home", "rule" : { "GET /" : "Home.IndexController:index", "GET /about.html" : "Home.IndexController:about", "POST /auth/{username}.json" : "Home.AuthController:auth" } } ] ``` ### 1.3.2.2 解释: 每一个路由都是一个json数组,其中每一项有两个属性:`base`和`rule`。其中`base`是路由的作用根目录,例如`/home`只对开头为`/home`的URI生效。它不支持解析,效率较高,并且能够使代码更优雅。 其中的`rule`字段是一个Map,每一项的键就是匹配的URI,支持标准正则语法,还有一个附加语法:其中被大括号括起来的部分,会匹配任意字符,最后会把匹配到的数据存储到`request->data->route`中。(在控制器中,用`$req->data->route`或`$this->app->handler->getRequest()->data->route`可以访问这一对象。)而值则为控制器名称,格式:`应用名.控制器名:方法名`。 > tip: 用大括号包起来的部分中只能有英文大小写,不能有数字,否则不能正常匹配哦! ## 1.3.3 动态路由 在`/Config.php`或其他通过`$app->runScript()`执行的脚本中,可以添加动态路由。 在这些动态脚本的函数主体中,添加: ```php $App->route->on("GET,POST等访问方式", "匹配的URI,和rule字段的key一样", 回调函数); ``` 其中,回调函数须为callable,例如闭包函数就符合。如果需要使用控制器,那么回调函数可以这么写: ```php $App->controllerAsCallback("控制器名,和rule字段的值一样"); ``` 此外,还有如下替代写法: ```php $App->route->get("URI", callback); 对应 $App->route->on("get", "URI", callback); $App->route->post("URI", callback); 对应 $App->route->on("post", "URI", callback); $App->route->delete("URI", callback); 对应 $App->route->on("delete", "URI", callback); $App->route->put("URI", callback); 对应 $App->route->on("put", "URI", callback); $App->route->patch("URI", callback); 对应 $App->route->on("patch", "URI", callback); $App->route->cli("URI", callback); 对应 $App->route->on("cli", "URI", callback); 依次类推。 ```