在laravel使用注解自动注册

2025年3月15日16:02:45

在 Laravel 中使用 PHP8 原生注解需结合反射和服务提供者实现,以下是具体步骤及示例:

一、定义注解类

通过 #[Attribute] 声明注解类并指定作用范围‌:

// app/Attributes/Route.php
namespace App\Attributes;

use Attribute;

#[Attribute(Attribute::TARGET_METHOD)]
class Route {
    public function __construct(
        public string $path,
        public string $method = 'GET'
    ) {}
}

二、应用注解到控制器方法

在控制器方法上附加注解并传入参数‌:

// app/Http/Controllers/UserController.php
use App\Attributes\Route;

class UserController {
    #[Route(path: '/user', method: 'POST')]
    public function create() {
        // 创建用户逻辑
    }
}

三、解析注解并注册路由

通过服务提供者扫描控制器类,反射解析注解并动态注册路由‌:

// app/Providers/AnnotationServiceProvider.php
use Illuminate\Support\ServiceProvider;
use ReflectionClass;
use ReflectionMethod;
use App\Attributes\Route;

class AnnotationServiceProvider extends ServiceProvider {
    public function boot() {
      
        $action = request()->route()->getAction();
        //获取controller
        $controller = $action['controller'];
        //截断控制名称和方法
        [$controllerClass, $controllerMethod] = explode('@', $controller);
        //反射
        $reflectionClass = new \ReflectionClass($controllerClass);
        //获取方法
        $reflectionMethod = $reflectionClass->getMethod($controllerMethod);
        //司机端
        $attrs = $reflectionMethod->getAttributes(DriverAuth::class);

        //如果有注解,就权限验证,没有就不验证
        if (!empty($attrs)) {
           
        }

        }
    }
}

四、注册服务提供者

在 config/app.php 中注册服务提供者以激活注解解析‌:

'providers' => [
    // 其他服务提供者...
    App\Providers\AnnotationServiceProvider::class,
],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值