我正在尝试设置 Go!AOP Php 与我的 Yii 框架应用程序。
我做了以下事情:
1-安装 Go! 通过将以下行添加到我们的 composer.json 来使用 Composer 进行 AOP Php。
"lisachenko/go-aop-php":"0.4.*"
2-添加了这样的应用程序内核
<?php
// app/ApplicationAspectKernel.php
require_once 'TestMonitorAspect.php';
use Aspect\TestMonitorAspect;
use Go\Core\AspectKernel;
use Go\Core\AspectContainer;
/**
* Application Aspect Kernel
*/
class ApplicationAspectKernel extends AspectKernel
{
/**
* Configure an AspectContainer with advisors, aspects and pointcuts
*
* @param AspectContainer $container
*
* @return void
*/
protected function configureAop(AspectContainer $container)
{
$container->registerAspect(new TestMonitorAspect());
}
}
3-还添加了一个 TestMonitorAspect。
<?php
// Aspect/MonitorAspect.php
namespace Aspect;
require_once realpath(__DIR__.'/../../vendor/lisachenko/go-aop-php/src/Go/Aop/Aspect.php');
use Go\Aop\Aspect;
use Go\Aop\Intercept\FieldAccess;
use Go\Aop\Intercept\MethodInvocation;
use Go\Lang\Annotation\After;
use Go\Lang\Annotation\Before;
use Go\Lang\Annotation\Around;
use Go\Lang\Annotation\Pointcut;
/**
* Monitor aspect
*/
class TestMonitorAspect implements Aspect
{
/**
* Method that will be called before real method
*
* @param MethodInvocation $invocation Invocation
* @Before("within(**)")
*/
public function beforeMethodExecution(MethodInvocation $invocation)
{
\Yii::trace(__CLASS__.'AOP Hello World','system.*');
}
}
?>
因为他的 yii-aspect github 项目集成示例是针对 Yii 2.0 的,所以我做了我自己版本的 ApplicationAspectKernel 的 index.php 初始化。
我所做的是在 Yii 应用程序的 onBeginRequest 上初始化 ApplicationAspectKernel,然后在运行应用程序之前如下所示:
$app = Yii::createWebApplication($env->configWeb);
$app->onBeginRequest = function($event) {
include __DIR__ . '/protected/vendor/autoload.php'; // use composer
include __DIR__ . '/protected/vendor/lisachenko/go-aop-php/src/Go/Core/AspectKernel.php';
include __DIR__ . '/protected/extensions/go-aop-php/ApplicationAspectKernel.php';
// Initialize an application aspect container
$applicationAspectKernel = ApplicationAspectKernel::getInstance();
$applicationAspectKernel->init(array(
'debug' => true, // use 'false' for production mode
// Cache directory
'cacheDir' => null,
// Include paths restricts the directories where aspects should be applied, or empty for all source files
'includePaths' => array()
));
};
$app->run();
我们无法让任何方面发挥作用。
有没有人对如何解决这个问题有任何想法?非常感谢任何帮助或指导。谢谢!
我们咨询过的资源有: