CakePHP中的面向方面编程

CakePHP中的面向方面编程,php,cakephp,aop,goaop,Php,Cakephp,Aop,Goaop,我是CakePHP的新手,我正在尝试使用Go!我的测试应用程序中的AOP 即使我跟着导游走了!通过将其添加到my composer.json,似乎找不到AspectKernel类 <?php // app/ApplicationAspectKernel.php namespace Application; use Go\Core\AspectKernel; use Go\Core\AspectContainer; /** * Application Aspect Kernel *

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

即使我跟着导游走了!通过将其添加到my 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());
    }
}

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

看起来您将这个类放在/Applications/XAMPP/xampfiles/htdocs/test/app(第一行注释)中并且正在调用命名空间应用程序,请尝试使用应用程序命名空间

我得走了!正在开发我的应用程序

在/webroot/index.php中,将以下内容放在use的声明中:

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方法中忽略ApplicationSpectKernel中的@triggers注释:

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

看起来您将该类放在/Applications/XAMPP/xamppfiles/htdocs/test/app(第一行注释)中,并且正在调用命名空间应用程序,请尝试使用app namespace

我得走了!正在开发我的应用程序

在/webroot/index.php中,将以下内容放在use的声明中:

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方法中忽略ApplicationSpectKernel中的@triggers注释:

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

从您的解释来看,似乎您所做的只是将条目添加到
composer.json
文件中,而不是实际安装它。为什么需要AOP来衡量函数调用的性能?只需使用Xdebug并评测您的应用程序?另外,是否真的存在性能问题,或者您是否只是尝试尽早优化?提前优化是每个截止日期的敌人。@ndm:我已运行composer update并确认goaop/framework位于供应商文件夹中,因此我认为我可以安装。@burzum:嗯,不仅用于测量函数调用,而且用于将来的使用,如缓存和轻松检查所有函数调用及其参数(如果我们不应用AOP,我相信我们最终会有很多代码行来执行它)但我的耳朵对函数调用和参数监控都敞开着(称我为偏执狂,但我想监控我应用程序中的所有活动)从您的解释来看,您所做的一切似乎只是将条目添加到
composer.json
文件中,而不是实际安装它。为什么您需要AOP来测量函数调用的性能?只需使用Xdebug并评测您的应用程序?是否真的存在性能问题,或者您只是尝试尽早优化?早期优化非常重要每个截止日期的敌人。@ndm:我已经运行composer update并确认goaop/framework在供应商文件夹中,所以我认为我可以安装。@burzum:不仅用于测量函数调用,而且用于将来的使用,如缓存和轻松检查所有函数调用及其参数(如果我们不应用AOP,我相信我们最终会有很多代码行来执行它)但我的耳朵对函数调用和参数监控都敞开着(称我为偏执狂,但我想监控我应用程序中的所有活动)