PHP Hyperf 路由定义方式

有些事情着实让人烦心,而我能做的就是坚持。
HTTP路由:
路由定义方式:
1 配置文件 在config/routers.php里面
use Hyperf\HttpServer\Router\Router;
A 可以使用三种方式来访问
Router::addRoute(['GET', 'POST', 'HEAD'], '/', 'App\Controller\IndexController@index');
B 路由中的参数
a 必填参数
Router::addRoute(['GET'], '/api/coroutine/alternative/{id}', App\Controller\Api\CoroutineController@alternative');
b 可选参数
Router::addRoute(['GET'], '/api/coroutine/alternative/[{id}]', App\Controller\Api\CoroutineController@alternative');
接收路由参数:
1 public function param(int $id){
return $id
}
2 public function param(RequestInterface $request)
{
return $request->route('id',0);//0是默认值
}
C 添加路由组
Router::addGroup("/api/",function () {
Router::get('channel','App\Controller\Api\CoroutineController@channel');
Router::get('options/{id}', 'App\Controller\Api\CoroutineController@options');
});
D 使用@AutoController() 注解
use Hyperf\HttpServer\Annotation\AutoController;
/**
*@AutoController()
*/
class UserController
{
public function index()
{
}
}
这个注解可以声明这是一个控制器类。
这样可以访问"/user/index",如果你在app/controller 文件夹下面新建了一个文件夹比如叫api,那么你的路由就得改为"/api/user/index"。
@AutoController(prefix="/api") 这样可以加一个api前缀。这样做的优点是框架会自动解析这个类公共方法路由,并提供GET和POST 两种请求方式。
E 使用@Controller()注解
这个注解也可以声明这是一个控制器类。
在生成方法路由的时候@RequestMapping(path="index", methods="get,post")
路由参数的话
1 必填参数
@RequestMapping(path="index/{id}", methods="get,post")
2 可选参数
@RequestMapping(path="index/[id}]", methods="get,post")
tips: 我尝试了使用@AutoController()+@RequestMapping()
它的优先级是@AutoController()优先级比较高,所以@RequestMapping()在这里好像没起作用(hyperf2.0),所以这个注解需要你再每一个方法前面使用注解。
另外还可以使用@GetMapping(path="index/{id:\d+}") 这种以动词方式开头的代表,这个方法只能以该动词的方式访问。有PostMapping()、PutMapping()、HeadMapping()等等。
it never too late to learn.

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注