# 创建路由
创建一个基于XPHP的程序,第一步是创建路由。
所有的路由文件都位于 `/Var/Route/` 目录下,使用Json格式。
启动时,XPHP会遍历这个目录下的所有文件,把他们当作路由加载。
您可以先看一下样例路由:
```Json
[
{
"base" : "/",
"rule" : {
"index.html" : "Home.IndexController:index",
"hi/{hi}" : "Home.IndexController:Wow"
}
},
{
"base" : "/test/",
"rule" : {
"auto/{Action}.do" : "Home.TestController:Action",
"php/{Controller}.{Action}.php" : "Home.Controller:Action",
"python/{Application}.{Controller}.{Action}.php" : "Application.Controller:Action"
}
}
]
```
由于每一个路由规则都需要一次正则匹配,为了提高效率,XPHP路由引入了`Base`也就是路由根的概念。路由根不使用正则,只用简单的逐字匹配功能,但是一旦没有匹配路由根,那么下面的规则就会跳过不匹配。
这不但使得路由更美观,也使得效率提高。
## 分析
一个路由文件,可以有多个根节点。例如例子中,一个是`/`,一个是`/test/`。
每个路由文件,都是一个索引数组。每一项,有两个属性。`base`对应根节点,`rule`对应规则。
每个`rule`规则是一个关联数组,键是匹配的路由语句,值是对应的应用、控制器、方法名称。
路由语句,就是相对于根路径的路径。在这个路径中,可以使用正则,也可以使用`{变量名称}`进行匹配,在控制器中可以通过接受一个基于变量名称的关联数组,获取匹配到的值。
`rule`的值的格式:`应用名.控制器:方法`。
如果路由语句中匹配了`{Application}`,`{Controller}`,`{Action}`,将会分别覆盖掉应用名、控制器、方法。
> 编者注:由于刚开始写文档,可能写得不那么通俗,也有点乱,麻烦大家帮忙改进,可以发到 [我邮箱](mailto:xtl@xtlsoft.top) ,有问题可以 GitHub [@xtlsoft](https://github.com/xtlsoft)