AOP
感谢 Hyperf 作者的提交
安装
- 安装 aop-integration
composer require "hyperf/aop-integration: ^1.1"
增加 AOP 相关配置
我们需要在 config 目录下,增加 config.php 配置
<?phpuse Hyperf\Di\Annotation\AspectCollector;return ['annotations' => ['scan' => ['paths' => [BASE_PATH . '/app',],'ignore_annotations' => ['mixin',],'class_map' => [],'collectors' => [AspectCollector::class],],],'aspects' => [// 这里写入对应的 Aspectapp\aspect\DebugAspect::class,]];
配置入口文件 start.php
我们将初始化方法,放到 timezone 下方,以下省略其他代码
use Hyperf\AopIntegration\ClassLoader;if ($timezone = config('app.default_timezone')) {date_default_timezone_set($timezone);}// 初始化ClassLoader::init();
测试
首先让我们编写待切入类
<?phpnamespace app\service;class UserService{public function first(): array{return ['id' => 1];}}
其次新增对应的 DebugAspect
<?phpnamespace app\aspect;use app\service\UserService;use Hyperf\Di\Aop\AbstractAspect;use Hyperf\Di\Aop\ProceedingJoinPoint;class DebugAspect extends AbstractAspect{public $classes = [UserService::class . '::first',];public function process(ProceedingJoinPoint $proceedingJoinPoint){var_dump(11);return $proceedingJoinPoint->process();}}
接下来编辑控制器 app\controller\Index
<?phpnamespace app\controller;use app\service\UserService;use support\Request;class Index{public function json(Request $request){return json(['code' => 0, 'msg' => 'ok', 'data' => (new UserService())->first()]);}}
然后配置路由
<?phpuse Webman\Route;Route::any('/json', [app\controller\Index::class, 'json']);
最后启动服务,并测试。
php start.php startcurl http://127.0.0.1:8787/json
