yii-goaop - 将 goaop/framework 集成到 Yii,在 Yii 中优雅的面向切面编程。

我的项目地址

  • https://github.com/guanguans/yii-goaop

环境要求

  • Yii >= 2.0

装置

$ composer require guanguans/yii-goaop -vvv

composer.json add:

"autoload": {    "psr-4": {        "backend\\": "backend/",        "frontend\\": "frontend/",        "common\\": "common/",        "console\\": "console/",        "app\\": ""    }}
$ composer dumpautoload

配置

yii2-app-advanced

配置 config/main.php 文件中增加:

<?phpreturn [    'bootstrap' => [        'aop',    ],    'components' => [        'aop' => [            'class'   => 'Guanguans\YiiGoAop\GoAopComponent',            'initOption'  => [                // AOP Debug Mode                'debug'          => false,                // Application Root Directory                'appDir'         => dirname(dirname(__DIR__)),                // AOP Cache Directory                'cacheDir'       => dirname(__DIR__).'/runtime/aspect',                // Cache File Mode                'cacheFileMode'  => 511,                // Miscellaneous AOP Engine Features                'features'       => 0,                // Directories White List                'includePaths'   => [                    dirname(__DIR__),                ],                // Directories Black List                'excludePaths'   => [                    dirname(__DIR__).'/runtime',                    dirname(__DIR__).'/tests',                    dirname(__DIR__).'/views',                ],                // AOP Container                'containerClass' => \Go\Core\GoAspectContainer::class,            ],            // Yours aspects            'aspects' => [                frontend\aspects\LoggingAspect::class,            ],        ],    ]];

yii2-app-basic

配置 config/web.php 文件中增加:

return [    'bootstrap' => [        'aop',    ],    'components' => [        'aop' => [            'class'   => 'Guanguans\YiiGoAop\GoAopComponent',            'initOption'  => [                // AOP Debug Mode                'debug'          => false,                // Application Root Directory                'appDir'         => dirname(dirname(__DIR__)),                // AOP Cache Directory                'cacheDir'       => dirname(__DIR__).'/runtime/aspect',                // Cache File Mode                'cacheFileMode'  => 511,                // Miscellaneous AOP Engine Features                'features'       => 0,                // Directories White List                'includePaths'   => [                    dirname(__DIR__).'/assets',                    dirname(__DIR__).'/aspects',                    dirname(__DIR__).'/commands',                    dirname(__DIR__).'/controllers',                    dirname(__DIR__).'/models',                    dirname(__DIR__).'/widgets',                ],                // Directories Black List                'excludePaths'   => [                    dirname(__DIR__).'/config',                    dirname(__DIR__).'/mail',                    dirname(__DIR__).'/runtime',                    dirname(__DIR__).'/tests',                    dirname(__DIR__).'/vagrant',                    dirname(__DIR__).'/vendor',                    dirname(__DIR__).'/views',                    dirname(__DIR__).'/web',                ],                // AOP Container                'containerClass' => \Go\Core\GoAspectContainer::class,            ],            // Yours aspects            'aspects' => [                app\aspects\LoggingAspect::class,            ],        ],    ]];

应用示例

创立切面 public frontend\controllers\SiteController->*Index(*)

<?phpnamespace frontend\aspects;use Go\Aop\Aspect;use Go\Aop\Intercept\MethodInvocation;use Go\Lang\Annotation\Before;use Go\Lang\Annotation\After;use Yii;class LoggingAspect implements Aspect{    /**     * Method that will be called before real method     * @param  MethodInvocation  $invocation  Invocation     * @Before("execution(public frontend\controllers\SiteController->*Index(*))")     */    public function beforeMethodExecution(MethodInvocation $invocation)    {        file_put_contents(Yii::$app->getRuntimePath().'/logs/logging.log', 'this is a before method testing.'.PHP_EOL, FILE_APPEND);    }    /**     * Method that will be called after real method     * @param  MethodInvocation  $invocation  Invocation     * @After("execution(public frontend\controllers\SiteController->*Index(*))")     */    public function afterMethodExecution(MethodInvocation $invocation)    {        file_put_contents(Yii::$app->getRuntimePath().'/logs/logging.log', 'this is a after method testing.'.PHP_EOL, FILE_APPEND);    }}

运行拜访 http://localhost:8888/index.php?r=site/index

cat frontend/runtime/logs/logging.log

───────┬───────────────────────────────────────────────────────────────────       │ File: frontend/runtime/logs/logging.log───────┼───────────────────────────────────────────────────────────────────   1   │ this is a before method testing.   2   │ this is a after method testing.───────┴───────────────────────────────────────────────────────────────────

相干链接

  • https://github.com/goaop/framework