composer require hyperf/aop-integration
- 添加配置到
config/config.php
中
<?php
declare(strict_types=1);
! defined('BASE_PATH') && define('BASE_PATH', dirname(__DIR__, 1));
return [
'annotations' => [
'scan' => [
'paths' => [
BASE_PATH . '/app',
],
'ignore_annotations' => [
'mixin',
],
'class_map' => [
],
],
],
'aspects' => [
// 在此配置可用的 Aspect
],
];
- 修改入口文件
<?php
declare(strict_types=1);
namespace think;
use Hyperf\AopIntegration\ClassLoader;
require __DIR__ . '/../vendor/autoload.php';
// 初始化 AOP
! defined('BASE_PATH') && define('BASE_PATH', dirname(__DIR__, 1));
ClassLoader::init();
// 省略其他代码
我们需要在 config
目录下,增加 config.php
配置
<?php
use Hyperf\Di\Annotation\AspectCollector;
return [
'annotations' => [
'scan' => [
'paths' => [
BASE_PATH . '/app',
],
'ignore_annotations' => [
'mixin',
],
'class_map' => [
],
'collectors' => [
AspectCollector::class
],
],
],
'aspects' => [
// 这里写入对应的 Aspect
app\aspect\DebugAspect::class,
]
];
我们将初始化方法,放到 timezone 下方,以下省略其他代码
use Hyperf\AopIntegration\ClassLoader;
if ($timezone = config('app.default_timezone')) {
date_default_timezone_set($timezone);
}
// 初始化
ClassLoader::init();
首先让我们编写待切入类
<?php
namespace app\service;
class UserService
{
public function first(): array
{
return ['id' => 1];
}
}
其次新增对应的 DebugAspect
<?php
namespace 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
<?php
namespace 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()]);
}
}
最后启动服务,并测试。
php start.php start
curl http://127.0.0.1:8787/index/json