Download the PHP package goaop/goaop-symfony-bundle without Composer
On this page you can find all versions of the php package goaop/goaop-symfony-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download goaop/goaop-symfony-bundle
More information about goaop/goaop-symfony-bundle
Files in goaop/goaop-symfony-bundle
Package goaop-symfony-bundle
Short Description Integration bridge for Go! AOP framework
License MIT
Informations about the package goaop-symfony-bundle
GoAopBundle
The GoAopBundle adds support for Aspect-Oriented Programming via Go! AOP Framework for Symfony2 applications. Symfony 3.4 and upper versions are not supported! Global rewrite of bundle is required to make it working for newer versions of Symfony.
Overview
Aspect-Oriented Paradigm allows to extend the standard Object-Oriented Paradigm with special instruments for effective solving of cross-cutting concerns in your application. This code is typically present everywhere in your application (for example, logging, caching, monitoring, etc) and there is no easy way to fix this without AOP.
AOP defines new instruments for developers, they are:
- Joinpoint - place in your code that can be used for interception, for example, execution of single public method or accessing of single object property.
- Pointcut is a list of joinpoints defined with a special regexp-like expression for your source code, for example, all public and protected methods in the concrete class or namespace.
- Advice is an additional callback that will be called before, after or around concrete joinpoint. For PHP each advice is represented as a
\Closure
instance, wrapped into the interceptor object. -
Aspect is a special class that combines pointcuts and advices together, each pointcut is defined as an annotation and each advice is a method inside this aspect.
You can read more about AOP in different sources, there are good articles for Java language and they can be applied for PHP too, because it's general paradigm.
Installation
GoAopBundle can be easily installed with composer. Just ask a composer to download the bundle with dependencies by running the command:
Versions 1.x are for Symfony >=2.0,<2.7 Versions 2.x(master) are for Symfony >= 2.7 and 3.x
Then enable the bundle in the kernel:
Make sure that bundle is the first item in this list. This is required for the AOP engine to work correctly.
Configuration
Configuration for bundle is required for additional tuning of AOP kernel and source code whitelistsing/blacklisting.
XML format is supported for configuration of this bundle as well, for XML format please use provided XML schema file.
Defining new aspects
Aspects are services in the Symfony2 apllications and loaded into the AOP container with the help of compiler pass that collects all services tagged with goaop.aspect
tag. Here is an example how to implement a logging aspect that will log information about public method invocations in the src/ directory.
Definition of aspect class with pointuct and logging advice
Registration of aspect in the container:
If you're using Symfony 3.3+ with autowired and autoconfigured services, your aspects will be registered automatically.
Known issues and workarounds
- By default, it is not possible to weave Doctrine ORM entities without additional configuration (see https://github.com/goaop/framework/issues/327). However, this bundle delivers workaround that can be easily enabled in configuration (see section about configuration in text above). Workaround is disabled by default in order to save some performances.
- It is possible to get into circular reference issue when registering an aspect which has dependency on
service that uses weaved class, or depends on service that has weaved class. Currently, detection of
such scenario is not implemented, however, there are two workarounds:
- Instead of injecting weaved service in aspect, you can inject either service container or service locator (see https://symfony.com/doc/master/service_container/service_locators.html).
- Instead of injecting weaved service in aspect, you can define weaved service as "lazy" that will inject its lazy loading proxy (see https://symfony.com/doc/current/service_container/lazy_services.html).
License
This bundle is under the MIT license. See the complete license in the bundle:
Resources/meta/LICENSE
All versions of goaop-symfony-bundle with dependencies
symfony/framework-bundle Version ^2.6|^3.0|^4.0|^5.0
symfony/console Version ^2.6|^3.0|^4.0