next/aop
最新稳定版本:0.2.0
Composer 安装命令:
composer require next/aop
包简介
An AOP package that is resident in in-memory PHP frameworks, such as nextphp, WebMan.
README 文档
README
一款简单Aop实现。支持常驻内存型PHP应用。可以方便接入nextphp, Swoole,WebMan等框架。
环境要求
php 8.2
开启passthru函数
安装
composer require next/aop
使用,以下以webman为例
修改start.php文件
Aop::init( [__DIR__ . '/../app'], [ \Next\Aop\Collector\PropertyAttributeCollector::class, \Next\Aop\Collector\AspectCollector::class, ], __DIR__ . '/../runtime/aop', );
- paths 注解扫描路径
- collectors 注解收集器
- \Next\Aop\Collector\AspectCollector::class 切面收集器,取消后不能使用切面
- \Next\Aop\Collector\PropertyAttributeCollector::class 属性注解收集器,取消后不支持属性自动注入
- runtimeDir 运行时,生成的代理类和代理类地图会被缓存到这里
编写切面类,实现AspectInterface接口
<?php namespace App\aspects; use Next\Aop\ProceedingJoinPoint; use Next\Aop\Contract\AspectInterface; #[\Attribute(\Attribute::TARGET_METHOD)] class Round implements AspectInterface { public function process(ProceedingJoinPoint $joinPoint): mixed { echo 'before'; $result = $joinPoint->proceed(); // 直接调用被代理的方法 // $result = $joinPoint->process(); // 继续执行其他切面逻辑 echo 'after'; return $result; } }
修改方法添加切面注解
<?php namespace app\controller; use App\Aop\Attribute\Inject;use App\aspects\Round;use support\Request; class Index { #[Inject] protected Request $request; #[Round] public function index() { echo '--controller--'; return response('hello webman'); } }
注意上面添加了两个注解,属性和方法注解的作用分别为注入属性和切入方法,可以直接在控制器中打印属性$request发现已经被注入了,切面注解可以有多个,会按照顺序执行。具体实现可以参考这两个类,注意这里的Inject注解并不是从webman容器中获取实例,所以使用的话需要重新定义Inject以保证单例
你也可以使用AspectConfig注解类配置要切入的类,例如上面的切面类
<?php namespace App\aspects; use Next\Aop\Attribute\AspectConfig; use Next\Aop\ProceedingJoinPoint; use Next\Aop\Contract\AspectInterface; #[\Attribute(\Attribute::TARGET_METHOD)] #[AspectConfig('BaconQrCode\Writer', 'writeFile')] class Round implements AspectInterface { public function process(ProceedingJoinPoint $joinPoint): mixed { echo 'before'; $result = $joinPoint->process(); echo 'after'; return $result; } }
那么BaconQrCode\Writer类的writeFile方法将会被切入,该注解可以传递第三个参数数组,作为该切面构造函数的参数
启动
php start.php start
打开浏览器打开对应页面
控制台输出内容为
before--controller--after
统计信息
- 总下载量: 32
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 10
- 点击次数: 0
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2023-10-31