PHP code example of hyperf-plus / route

1. Go to this page and download the library: Download hyperf-plus/route library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

hyperf-plus / route example snippets




use HPlus\Route\Annotation\ApiController;
use HPlus\Route\Annotation\GetApi;
use HPlus\Route\Annotation\PostApi;
use HPlus\Route\Annotation\PutApi;
use HPlus\Route\Annotation\DeleteApi;

#[ApiController]  // 自动生成 /api/users (复数化)
class UserController
{
    #[GetApi]
    public function index() {}     // GET /api/users
    
    #[GetApi] 
    public function show($id) {}   // GET /api/users/{id}
    
    #[PostApi]
    public function create() {}    // POST /api/users
    
    #[PutApi]
    public function update($id) {} // PUT /api/users/{id}
    
    #[DeleteApi]
    public function delete($id) {} // DELETE /api/users/{id}
}

#[ApiController]
class UserController
{
    #[GetApi]
    public function state($id) {}     // GET /api/users/{id}/state
    
    #[PostApi]
    public function enable($id) {}    // POST /api/users/{id}/enable
    
    #[PostApi]
    public function disable($id) {}   // POST /api/users/{id}/disable
    
    #[GetApi]
    public function permissions($id) {} // GET /api/users/{id}/permissions
}

#[ApiController]
class UserController
{
    #[GetApi]
    public function customAction(int $id) {}
    // 自动生成: GET /api/users/{id}/custom-action
    
    #[GetApi]
    public function posts(int $userId, int $postId) {}
    // 自动生成: GET /api/users/{userId}/posts/{postId}
    
    #[GetApi]
    public function getByEmail(string $email) {}
    // 自动生成: GET /api/users/get-by-email/{email}
}

#[ApiController(prefix: '/v1/members')]  // 自定义前缀
class UserController
{
    #[GetApi(path: '/all')]  // 自定义路径
    public function index() {}  // GET /v1/members/all
    
    #[GetApi]  // 混合使用
    public function show($id) {}  // GET /v1/members/{id}
}

#[ApiController(
    prefix: '/api/v1/users',  // 可选:路由前缀,不设置则自动生成
    tag: 'User Management',   // 可选:API 标签
    description: '用户管理',   // 可选:API 描述
    security: true           // 可选:是否需要认证
)]

#[GetApi(
    path: '/{id}/detail',     // 可选:自定义路径
    summary: '获取用户详情',   // 可选:接口摘要
    description: '详细描述',   // 可选:接口描述
    name: 'user.detail',      // 可选:路由名称
    middleware: ['auth'],     // 可选:中间件
    security: true,          // 可选:是否需要认证
    deprecated: false        // 可选:是否已废弃
)]

use HPlus\Route\Annotation\Query;
use HPlus\Route\Annotation\Path;
use HPlus\Route\Annotation\Body;
use HPlus\Route\Annotation\Header;

#[GetApi]
public function search(
    #[Query('keyword')] string $keyword,      // 查询参数
    #[Path('id')] int $id,                   // 路径参数
    #[Header('X-Token')] string $token,      // 请求头参数
    #[Body] array $data                      // 请求体
) {}

use HPlus\Route\RouteCollector;

$collector = RouteCollector::getInstance();

// 收集所有路由
$routes = $collector->collectRoutes();

// 查找路由
$route = $collector->findRouteByPath('/api/users');
$routes = $collector->findRoutesByController(UserController::class);
$routes = $collector->findRoutesByTag('User Management');

// 获取统计信息
$stats = $collector->getRouteStats();
$cache = $collector->getCacheStats();

namespace App\Controller\Api\V2;

#[ApiController]  // 自动生成 /api/v2/users
class UserController
{
    #[GetApi]
    public function index() {}  // GET /api/v2/users
}

#[ApiController(prefix: '/admin')]
class AdminController
{
    #[GetApi]
    public function dashboard() {}  // GET /admin/dashboard
}

#[ApiController(prefix: '/admin/users')]
class AdminUserController
{
    #[GetApi]
    public function index() {}  // GET /admin/users
}

return [
    'scan' => [
        'paths' => [
            BASE_PATH . '/app',
        ],
        'ignore_annotations' => [
            'mixin',
        ],
        'class_map' => [
            // 需要映射的类
        ],
    ],
];

use HPlus\Validate\Annotations\RequestValidation;

#[GetApi]
#[RequestValidation(rules: [
    'page' => 'integer|min:1',
    'size' => 'integer|max:100'
])]
public function index() {}