Coder Social home page Coder Social logo

aop-integration's Introduction

Aop Integration

PHPUnit

安装

composer require hyperf/aop-integration

配置 AOP 到 ThinkPHP 框架

  1. 添加配置到 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
    ],
];
  1. 修改入口文件
<?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();

// 省略其他代码

配置 AOP 到 Webman 框架

增加 AOP 相关配置

我们需要在 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,
    ]
];

配置入口文件 start.php

我们将初始化方法,放到 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

aop-integration's People

Contributors

guanhui07 avatar limingxinleo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

aop-integration's Issues

wenman按文档使用aop组件出错

webman的最新版本。

Fatal error: Declaration of Hyperf\AopIntegration\ClassLoader::init(?string $proxyFileDirPath = null, ?string $configDir = null): void must be compatible with Hyperf\Di\ClassLoader::init(?string $proxyFileDirPath = null, ?string $configDir = null, ?Hyperf\Di\ScanHandler\ScanHandlerInterface $handler = null): void in D:\Phpcode\webman-admin\vendor\hyperf\aop-integration\src\ClassLoader.php on line 22

thinkphp无法正常使用

thinkphp 按照步骤使用了一下,能生成代理类但是无法切入,把代理类的代码复制到控制器可以正常切入

php8中报错是

在webman、php8中启动报错
Fatal error: Cannot make static method Hyperf\Di\ClassLoader::loadDotenv() non static in class Hyperf\AopIntegration\ClassLoader in D:\phpstudy_pro\WWW\webman\annotation-example\vendor
\hyperf\aop-integration\src\ClassLoader.php on line 36

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.