繼今天發(fā)布通過固定注解來包裝的切面后,發(fā)現(xiàn)在實際業(yè)務(wù)中局限性還是很大,于是又繼續(xù)完善了下。采用接口的形式進(jìn)行定義處理。而不是固定的通過包裝的形式。 你可以把這個想成“針對某個方法的”中間件調(diào)用鏈
<?php
declare(strict_types=1);
namespace app\admin\attribute;
use panda\container\Contract\AopHandlerInterface;
use ReflectionFunction;
use ReflectionMethod;
#[\Attribute(\Attribute::TARGET_METHOD)]
class PermissionCheck implements AopHandlerInterface
{
public function beforeEntering(ReflectionMethod|ReflectionFunction $reflect, array $serviceVariables): mixed
{
dump('前置處理');
return null;
}
public function afterComingOut(ReflectionMethod|ReflectionFunction $reflect, mixed $serviceResult): void
{
dump('后置處理');
}
}
class Test
{
#[RequestMapping('/demo')]
// 進(jìn)入控制器前 進(jìn)行權(quán)限認(rèn)證
// 控制器執(zhí)行完畢后 日志記錄 等等 實現(xiàn)業(yè)務(wù)的無侵入增強
#[PermissionCheck]
public function index(Cache $cache): string
{
dump('hello world');
return 'hello world';
}
}