SW-X的路由处理,只对HTTP
、WebSocket
、RPC
服务生效。
并且,如果是WebSocket
服务,则必须启用框架处理模式,自定义请求模式无效。
SW-X路由注册有3种方式,最常用的为PATH_INFO
地址解析,
例如,现在有一个HTTP控制器/app/http/shop/Index.php
,要路由访问里面的create()
方法,
那么路由则为:http://IP:端口/shop/index/create。
但这种情况下会有一些开发者觉得路由太长,不够美观,在不改变文件位置跟内部代码的情况下,可以使用@RequestMapping
注解路由,对路由进行二次优化:
namespace app\http\shop;
// 控制器系统基类
use x\controller\Http;
class Index extends Http
{
/**
* @RequestMapping(route="/test", method="get", title="我是路由定义注解")
*/
public function create() {
return $this->fetch('SW-X 欢迎你!');
}
}
修改后,路由则为:http://IP:端口/test,同时只支持get
请求。
对于不想用注解路由来进行单条路由优化的开发者,框架从v2.5.5
版本起,提供了路由表注册的支持。
可以在/box/route.php
文件中,使用\x\Route
路由表类进行路由注册。
例如上面案例的优化注册:
use \x\Route;
Route::get('/test', 'shop/Index/create')->register();
以下顺序,越往上优先级越高,会往下覆盖合并:
可能会有开发者有疑问,如果注解中使用了很多路由规则,那我要怎么知道都有哪些路由呢?
为了应对这个问题,SW-X提供了获取应用全路由表的方法。
具体使用方法如下:
$array = \x\route\doc\Table::route(); // 获取全部路由
$http = $array['http'];
$websokcet = $array['websokcet'];
最终返回的数组结构是个多维数组,下面是可能存在的节点:
[
'路由地址' => [
'n' => 命名空间地址,
'name' => '方法名称',
'method' => '请求类型',
'title' => '路由描述',
'father' => 父class的注解
'own' => function本身的注解
]
]