4、Hyperf 3 快速使用 - Hypref 3 注解定义路由之 #[Controller]
hi,我是温新,一名 PHPer
学习目标:掌握
#[Controller]
注解的形式使用路由
#[Controller] 注解
#[Controller]
为满足更细致的路由定义需求而存在,使用 #[Controller]
注解用于表明当前类为一个 Controller
类,同时需配合 #[RequestMapping]
注解来对请求方法和请求路径进行更详细的定义。
对于不同类型的方法,提供了相应且便捷的 Mapping
注解,如 #[GetMapping]
、#[PostMapping]
、#[PutMapping]
、#[PatchMapping]
、#[DeleteMapping]
5 种便捷的注解用于表明允许不同的请求方法。
注解 | 命令空间 |
---|---|
\#[Controller] |
use Hyperf\HttpServer\Annotation\Controller; |
\#[RequestMapping] |
use Hyperf\HttpServer\Annotation\RequestMapping; |
\#[GetMapping] |
use Hyperf\HttpServer\Annotation\GetMapping; |
\#[PostMapping] |
use Hyperf\HttpServer\Annotation\PostMapping; |
\#[PutMapping] |
use Hyperf\HttpServer\Annotation\PutMapping; |
#[PatchMapping] |
use Hyperf\HttpServer\Annotation\PatchMapping; |
#[DeleteMapping] |
use Hyperf\HttpServer\Annotation\DeleteMapping; |
第一步:创建控制器与方法
<?php
// App\Controller\Demo\DemoController.php
namespace App\Controller\Demo;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
#[Controller]
class PostController
{
// Hyperf 会自动为此方法生成一个 /user/index 的路由,
//允许通过 GET 或 POST 方式请求
#[RequestMapping('index', 'get,post')]
public function index()
{
return '#[Controller] 注解';
}
#[RequestMapping('/post/test', 'get')]
public function test()
{
return '路由路径测试';
}
}
第二步:路由访问
$curl http://localhost:9501/demo/post/index
#[Controller] 注解
$curl http://localhost:9501/post/test
路由路径测试
注意:
1、若路由前面没有加
/
,访问时需要加上目录名称;2、若路由前面加了
/
,访问时,则以该路由访问。理解:把
/
当作绝对路径来理解。
注解参数说明
#[Controller]
和 #[AutoController]
都提供了 prefix
和 server
两个参数。
prefix
表示该 Controller
下的所有方法路由的前缀,默认为类名的小写,如 UserController
则 prefix
默认为 user
,如类内某一方法的 path
为 index
,则最终路由为 /user/index
。
需要注意的是
prefix
并非一直有效,当类内的方法的path
以/
开头时,则表明路径从URI
头部开始定义,也就意味着会忽略prefix
的值,同时如果没有设置prefix
属性,那么控制器类命名空间中\\Controller\\
之后的部分会以蛇形命名法(SnakeCase)被用作路由的前缀。
请登录后再评论