CakePHP中面向方面编程

时间:2017-02-12 14:48:37

标签: php cakephp aop goaop

我是CakePHP的新手,我正在尝试使用Go!我的测试应用程序中的AOP。

尽管我遵循指南并导入Go!通过将它添加到我的composer.json,似乎找不到AspectKernel类。

<?php
// app/ApplicationAspectKernel.php

namespace Application;

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 MonitorAspect());
    }
}

错误:类&#39; Go \ Core \ AspectKernel&#39;没找到
文件:/Applications/XAMPP/xamppfiles/htdocs/test/app/Application/ApplicationAspectKernel.php

如果以前有人解决过这个问题,我很乐意听取您的意见。

这是我的composer.json&#34;要求&#34;值。

"require": {
    "php": ">=5.3.0",
    "ext-mcrypt": "*",
    "goaop/framework": "dev-master"
},

CakePHP似乎是一个非常实用的框架,我希望我可以在那里应用AOP,以消除手动为日志功能添加日志的需要。开始和结束(测量函数的性能)

1 个答案:

答案 0 :(得分:0)

看起来你将这个类放在/ Applications / XAMPP / xamppfiles / htdocs / test / app(第一行注释)中并调用命名空间Application,尝试使用App命名空间。

我走了!在我的应用程序上工作。

在/webroot/index.php中将以下内容用于使用声明:

use App\ApplicationAspectKernel;
$aspect = ApplicationAspectKernel::getInstance();
$aspect->init(array(
    'debug' => true, // use 'false' for production mode
    'cacheDir'  => dirname(__DIR__).'/tmp/aop',
    'includePaths' => [
        dirname(__DIR__) . '/src'
    ]
));

我要忽略configureAop方法中ApplicationAspectKernel中的@triggers注释:

protected function configureAop(AspectContainer $container) {
    // use Doctrine\Common\Annotations\AnnotationReader;
    AnnotationReader::addGlobalIgnoredName('triggers');
    $container->registerAspect(new CacheAspect());
}