1

我正在尝试设置 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();

我们无法让任何方面发挥作用。

有没有人对如何解决这个问题有任何想法?非常感谢任何帮助或指导。谢谢!

我们咨询过的资源有:

  1. http://go.aopphp.com/docs/
  2. https://github.com/lisachenko/go-aop-php
  3. https://github.com/lisachenko/yii-aspect
  4. http://net.tutsplus.com/tutorials/php/aspect-oriented-programming-in-php-with-go/
4

1 回答 1

1

我重新创建了我的https://github.com/lisachenko/yii-aspect存储库,以使用 composer 安装 Yii 和 Go!AOP 框架在一起。请检查一下。

UPD1:packagist 上还有 yii-aspect 项目的单行安装程序:

composer create-project lisachenko/yii-aspect --stability=dev

UPD2:关于配置的详细手册也可以在我的文章Aspect-Oriented Programming With Yii中找到

于 2013-09-26T19:51:22.710 回答