在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:goaop/framework开源软件地址:https://github.com/goaop/framework开源编程语言:PHP 100.0%开源软件介绍:Go! Aspect-Oriented Framework for PHPGo! AOP is a modern aspect-oriented framework in plain PHP with rich features for the new level of software development. The framework allows cross-cutting issues to be solved in the traditional object-oriented PHP code by providing a highly efficient and transparent hook system for your exisiting code. Features
What is AOP?AOP (Aspect-Oriented Programming) is an approach to cross-cutting concerns, where these concerns are designed and implemented in a "modular" way (that is, with appropriate encapsulation, lack of duplication, etc.), then integrated into all the relevant execution points in a succinct and robust way, e.g. through declarative or programmatic means. In AOP terms, the execution points are called join points. A set of those points is called a pointcut and the new behavior that is executed before, after, or "around" a join point is called advice. You can read more about AOP in Introduction section. InstallationGo! AOP framework can be installed with composer. Installation is quite easy:
Step 0 (optional): Try demo examples in the frameworkAsk composer to create new project in empty directory: composer create-project goaop/framework After that just configure your web server to Step 1: Download the library using composerAsk composer to download the latest version of Go! AOP framework with its dependencies by running the command: composer require goaop/framework Composer will install the framework to your project's Step 2: Create an application aspect kernelThe aim of this framework is to provide easy AOP integration for your application.
You have to first create the The framework provides base class to make it easier to create your own kernel.
To create your application kernel, extend the abstract class <?php
// app/ApplicationAspectKernel.php
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)
{
}
} 3. Configure the aspect kernel in the front controllerTo configure the aspect kernel, call // front-controller, for Symfony2 application it's web/app_dev.php
include __DIR__ . '/vendor/autoload.php'; // use composer
// Initialize an application aspect container
$applicationAspectKernel = ApplicationAspectKernel::getInstance();
$applicationAspectKernel->init([
'debug' => true, // use 'false' for production mode
'appDir' => __DIR__ . '/..', // Application root directory
'cacheDir' => __DIR__ . '/path/to/cache/for/aop', // Cache directory
// Include paths restricts the directories where aspects should be applied, or empty for all source files
'includePaths' => [
__DIR__ . '/../src/'
]
]); 4. Create an aspectAspect is the key element of AOP philosophy. Go! AOP framework just uses simple PHP classes for declaring aspects, which makes it possible to use all features of OOP for aspect classes. As an example let's intercept all the methods and display their names: // Aspect/MonitorAspect.php
namespace Aspect;
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 MonitorAspect implements Aspect
{
/**
* Method that will be called before real method
*
* @param MethodInvocation $invocation Invocation
* @Before("execution(public Example->*(*))")
*/
public function beforeMethodExecution(MethodInvocation $invocation)
{
echo 'Calling Before Interceptor for: ',
$invocation,
' with arguments: ',
json_encode($invocation->getArguments()),
"<br>\n";
}
} Easy, isn't it? We declared here that we want to install a hook before the execution of
all dynamic public methods in the class Example. This is done with the help of annotation
5. Register the aspect in the aspect kernelTo register the aspect just add an instance of it in the // app/ApplicationAspectKernel.php
use Aspect\MonitorAspect;
//...
protected function configureAop(AspectContainer $container)
{
$container->registerAspect(new MonitorAspect());
}
//... 6. Optional configurations6.1 Custom annotation cacheBy default, Go! AOP uses This can be very useful when deploying to read-only filesystems. In that
case, you may use, per example, 6.2 Support for weaving Doctrine entities (experimental, alpha)Weaving Doctrine entities can not be supported out of the box due to the fact that Go! AOP generates two sets of classes for each weaved entity, a concrete class and proxy with pointcuts. Doctrine will interpret both of those classes as concrete entities and assign for both of them same metadata, which would mess up the database and relations (see #327). Therefore, a workaround is provided with this library which will sort out
mapping issue in Doctrine. Workaround is in form of event subscriber,
Event subscriber will modify metadata entity definition for generated Go! Aop proxies as mapped superclass. That would sort out issues on which you may stumble upon when weaving Doctrine entities. 7. ContributionTo contribute changes see the Contribute Readme DocumentationDocumentation about Go! library can be found at official site. If you like this project, you could support it via |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论