在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,
],
QQ一群 247823727
QQ二群 166427999
如果項目有技術瓶頸問題,請聯系↓↓
QQ: 903464207
微信: zx903464207
QQ二群 166427999
如果項目有技術瓶頸問題,請聯系↓↓
QQ: 903464207
微信: zx903464207
浙公網安備 33010602011771號