4、Hyperf 3 快速使用 - Hypref 3 注解定义路由之 #[Controller]

作者: 温新

分类: 【Hyperf 3 基础系列】

阅读: 1451

时间: 2023-04-25 12:10:37

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] 都提供了 prefixserver 两个参数。

prefix 表示该 Controller 下的所有方法路由的前缀,默认为类名的小写,如 UserControllerprefix 默认为 user,如类内某一方法的 pathindex,则最终路由为 /user/index

需要注意的是 prefix 并非一直有效,当类内的方法的 path/ 开头时,则表明路径从 URI 头部开始定义,也就意味着会忽略 prefix 的值,同时如果没有设置 prefix 属性,那么控制器类命名空间中 \\Controller\\ 之后的部分会以蛇形命名法(SnakeCase)被用作路由的前缀。

请登录后再评论