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名稱上面@AutoController
並use Hyperf\HttpServer\Annotation\AutoController;
即可實現自動註解。自動註解為絕大多數簡單的訪問場景提供路由繫結支援,使用@AutoController
時則 Hyperf 會自動解析所在類的所有 public
方法並提供 GET
和 POST
兩種請求方式
<?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 |