Hyperf - 自動註解

Myifb發表於2024-08-02

Hyperf 提供了極其強大和方便靈活的 註解 功能,在路由的定義上也毫無疑問地提供了註解定義的方式,Hyperf 提供了 #[Controller] 和 #[AutoController] 兩種註解來定義一個 Controller

詳情檢視官方文件
注:

  • 在shell中使用 php bin/hyperf.php describe:routes 即可檢視專案路由列表
  • PHP 8.0及以上版本:在PHP 8.0及以上版本中,你可以使用屬性語法(#[AutoController]
  • PHP 7.x版本:在PHP 7.x版本中,你需要使用傳統的註解語法(@AutoController)
  • 僅控制器類中的公共(public)方法會生成路由規則,protected以及private不會

在Controller名稱上面@AutoControlleruse Hyperf\HttpServer\Annotation\AutoController;即可實現自動註解。自動註解為絕大多數簡單的訪問場景提供路由繫結支援,使用@AutoController時則 Hyperf 會自動解析所在類的所有 public 方法並提供 GETPOST 兩種請求方式

<?php

declare(strict_types=1);

namespace App\Adminv1\Controller;

use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\AutoController;

/**
 * @AutoController()
 */
class UserController
{
    public function test(RequestInterface $request)
    {
        $user = $request->input('user', 'Hyperf');
        $method = $request->getMethod();

        return [
            'method' => $method,
            'message' => "Hello {$user}.嘿嘿嘿",
        ];
    }
}

駝峰命名的控制器,會自動轉化為蛇形路由,以下為控制器與實際路由的對應關係示例:

控制器 註解 訪問路由
MyDataController @AutoController() /my_data/index
MydataController @AutoController() /mydata/index
MyDataController @AutoController(prefix="/admin/data") /admin/data/index

相關文章