aop使用教程
composer require yzh52521/webman-aop
在根目錄增加define.php
use yzh52521\aop\ClassLoader;
$appConfig = config('app');
if (isset($appConfig['default_timezone'])) {
date_default_timezone_set($appConfig['default_timezone']);
}
//aop
ClassLoader::reload(config('aop'));
ClassLoader::init();
在start.php文件下引入 define.php
require_once __DIR__ . '/define.php';
增加 AOP 切片 相關(guān)配置 我們需要在 config 目錄下,增加 aop.php 配置
<?php
return [
'aspect' => [
\app\aspect\UserAspect::class,
],
];
首先讓我們編寫待切入類
?php
namespace app\service;
class UserService
{
public function info()
{
echo 'UserService info' . PHP_EOL;
}
}
其次新增對(duì)應(yīng)的 UserAspect
namespace app\aspect;
use app\service\UserService;
use yzh52521\aop\AbstractAspect;
use yzh52521\aop\interfaces\ProceedingJoinPointInterface;
/**
* Class UserAspect
* @package app\aspect
*/
class UserAspect extends AbstractAspect
{
public $classes = [
UserService::class . '::info',
];
/**
* @param ProceedingJoinPointInterface $entryClass
* @return mixed
*/
public function process(ProceedingJoinPointInterface $entryClass)
{
var_dump('UserAspect before');
$res = $entryClass->process();
var_dump('UserAspect after');
return $res;
}
}
測(cè)試 在app\controller\Index控制器中代碼:
public function index()
{
/** @var UserService $userService */
$userService = load(UserService::class);
$userService->info();
}
php start.php start, 命令行輸出結(jié)果:
UserAspect before
UserService info
UserAspect after
容器 load 函數(shù)在 helpers.php 定義如下 :
/**
* 加載容器的對(duì)象
*/
if (! function_exists('load')) {
function load(string $class)
{
return \support\Container::instance()->get($class);
}
}
Fatal error: Uncaught Error: Call to undefined function yzh52521\aop\Aop\value() in saas\test\vendor\yzh52521\webman-aop\src\Aop\ProxyNodeVisitor.php:141
一直報(bào)錯(cuò),怎么處理啊,是沒(méi)有把文件上傳完整嗎?