PHP Class Neos\Flow\Aop\Builder\ProxyClassBuilder

Afficher le fichier Open project: neos/flow-development-collection Class Usage Examples

Protected Properties

Свойство Type Description
$aspectContainers array A registry of all known aspects
$blacklistedSubPackages array Hardcoded list of Flow sub packages (first 15 characters) which must be immune to AOP proxying for security, technical or conceptual reasons.
$compiler Neos\Flow\ObjectManagement\Proxy\Compiler
$methodInterceptorBuilders array
$objectConfigurationCache Neos\Cache\Frontend\VariableFrontend
$objectManager Neos\Flow\ObjectManagement\CompileTimeObjectManager
$pointcutExpressionParser Neos\Flow\Aop\Pointcut\PointcutExpressionParser An instance of the pointcut expression parser
$proxyClassBuilder ProxyClassBuilder
$reflectionService Neos\Flow\Reflection\ReflectionService
$settings array The Flow settings
$systemLogger Neos\Flow\Log\SystemLoggerInterface

Méthodes publiques

Méthode Description
build ( ) : void Builds proxy class code which weaves advices into the respective target classes.
buildProxyClass ( string $targetClassName, array &$aspectContainers ) : boolean Builds methods for a single AOP proxy class for the specified class.
findPointcut ( string $aspectClassName, string $pointcutMethodName ) : mixed Traverses the aspect containers to find a pointcut from the aspect class name and pointcut method name
injectAdvicedConstructorInterceptorBuilder ( AdvicedConstructorInterceptorBuilder $builder ) : void Injects the Adviced Constructor Interceptor Builder
injectAdvicedMethodInterceptorBuilder ( AdvicedMethodInterceptorBuilder $builder ) : void Injects the Adviced Method Interceptor Builder
injectCompiler ( Compiler $compiler ) : void
injectObjectConfigurationCache ( Neos\Cache\Frontend\VariableFrontend $objectConfigurationCache ) : void Injects the cache for storing information about objects
injectObjectManager ( CompileTimeObjectManager $objectManager ) : void
injectPointcutExpressionParser ( PointcutExpressionParser $pointcutExpressionParser ) : void Injects an instance of the pointcut expression parser
injectReflectionService ( ReflectionService $reflectionService ) : void Injects the reflection service
injectSettings ( array $settings ) : void Injects the Flow settings
injectSystemLogger ( Neos\Flow\Log\SystemLoggerInterface $systemLogger ) : void

Méthodes protégées

Méthode Description
addAdvicedMethodsToInterceptedMethods ( array &$interceptedMethods, array $methods, string $targetClassName, array &$aspectContainers ) : void Traverses all aspect containers, their aspects and their advisors and adds the methods and their advices to the (usually empty) array of intercepted methods.
addBuildMethodsAndAdvicesCodeToClass ( string $className, ClassNameIndex $treatedSubClasses ) : ClassNameIndex Adds code to build the methods and advices array in case the parent class has some.
addIntroducedMethodsToInterceptedMethods ( array &$interceptedMethods, array $methodsFromIntroducedInterfaces ) : void Traverses all methods which were introduced by interfaces and adds them to the intercepted methods array if they didn't exist already.
buildAspectContainer ( string $aspectClassName ) : mixed Creates and returns an aspect from the annotations found in a class which is tagged as an aspect. The object acting as an advice will already be fetched (and therefore instantiated if necessary).
buildAspectContainers ( array &$classNames ) : array Checks the annotations of the specified classes for aspect tags and creates an aspect with advisors accordingly.
buildMethodsAndAdvicesArrayCode ( array $methodsAndGroupedAdvices ) : string Creates code for an array of target methods and their advices.
buildMethodsInterceptorCode ( string $targetClassName, array $interceptedMethods ) : void Traverses all intercepted methods and their advices and builds PHP code to intercept methods if necessary.
getInterfaceNamesFromIntroductions ( array $interfaceIntroductions ) : array Returns an array of interface names introduced by the given introductions
getIntroducedMethodsFromInterfaceIntroductions ( array $interfaceIntroductions ) : array Returns all methods declared by the introduced interfaces
getMatchingInterfaceIntroductions ( array &$aspectContainers, string $targetClassName ) : array Traverses all aspect containers and returns an array of interface introductions which match the target class.
getMatchingPropertyIntroductions ( array &$aspectContainers, string $targetClassName ) : array | PropertyIntroduction[] Traverses all aspect containers and returns an array of property introductions which match the target class.
getMatchingTraitNamesFromIntroductions ( array &$aspectContainers, string $targetClassName ) : array Traverses all aspect containers and returns an array of trait introductions which match the target class.
getMethodsFromTargetClass ( string $targetClassName ) : array Returns the methods of the target class.
getProxyableClasses ( array $classNamesByPackage ) : array Determines which of the given classes are potentially proxyable and returns their names in an array.
proxySubClassesOfClassToEnsureAdvices ( string $className, ClassNameIndex $targetClassNameCandidates, ClassNameIndex $treatedSubClasses ) : ClassNameIndex Makes sure that any sub classes of an adviced class also build the advices array on construction.
renderSourceHint ( string $aspectClassName, string $methodName, string $tagName ) : string Renders a short message which gives a hint on where the currently parsed pointcut expression was defined.

Method Details

addAdvicedMethodsToInterceptedMethods() protected méthode

Traverses all aspect containers, their aspects and their advisors and adds the methods and their advices to the (usually empty) array of intercepted methods.
protected addAdvicedMethodsToInterceptedMethods ( array &$interceptedMethods, array $methods, string $targetClassName, array &$aspectContainers ) : void
$interceptedMethods array
$methods array An array of class and method names which are matched against the pointcut (class name = name of the class or interface the method was declared)
$targetClassName string Name of the class the pointcut should match with
$aspectContainers array
Résultat void

addBuildMethodsAndAdvicesCodeToClass() protected méthode

Adds code to build the methods and advices array in case the parent class has some.
protected addBuildMethodsAndAdvicesCodeToClass ( string $className, ClassNameIndex $treatedSubClasses ) : ClassNameIndex
$className string
$treatedSubClasses ClassNameIndex
Résultat ClassNameIndex

addIntroducedMethodsToInterceptedMethods() protected méthode

Traverses all methods which were introduced by interfaces and adds them to the intercepted methods array if they didn't exist already.
protected addIntroducedMethodsToInterceptedMethods ( array &$interceptedMethods, array $methodsFromIntroducedInterfaces ) : void
$interceptedMethods array
$methodsFromIntroducedInterfaces array An array of class and method names from introduced interfaces
Résultat void

build() public méthode

The object configurations provided by the Compiler are searched for possible aspect annotations. If an aspect class is found, the pointcut expressions are parsed and a new aspect with one or more advisors is added to the aspect registry of the AOP framework. Finally all advices are woven into their target classes by generating proxy classes. In general, the command neos.flow:core:compile is responsible for compilation and calls this method to do so. In order to distinguish between an emerged / changed possible target class and a class which has been matched previously but just didn't have to be proxied, the latter are kept track of by an "unproxiedClass-*" cache entry.
public build ( ) : void
Résultat void

buildAspectContainer() protected méthode

Creates and returns an aspect from the annotations found in a class which is tagged as an aspect. The object acting as an advice will already be fetched (and therefore instantiated if necessary).
protected buildAspectContainer ( string $aspectClassName ) : mixed
$aspectClassName string Name of the class which forms the aspect, contains advices etc.
Résultat mixed The aspect container containing one or more advisors or FALSE if no container could be built

buildAspectContainers() protected méthode

Checks the annotations of the specified classes for aspect tags and creates an aspect with advisors accordingly.
protected buildAspectContainers ( array &$classNames ) : array
$classNames array
Résultat array An array of Aop\AspectContainer for all aspects which were found.

buildMethodsAndAdvicesArrayCode() protected méthode

Example: $this->Flow_Aop_Proxy_targetMethodsAndGroupedAdvices = array( 'getSomeProperty' => array( \Neos\Flow\Aop\Advice\AroundAdvice::class => array( new \Neos\Flow\Aop\Advice\AroundAdvice(\Neos\Foo\SomeAspect::class, 'aroundAdvice', \Neos\Flow\Core\Bootstrap::$staticObjectManager, function() { ... }), ), ), );
See also: buildProxyClass()
protected buildMethodsAndAdvicesArrayCode ( array $methodsAndGroupedAdvices ) : string
$methodsAndGroupedAdvices array An array of method names and grouped advice objects
Résultat string PHP code for the content of an array of target method names and advice objects

buildMethodsInterceptorCode() protected méthode

The generated code is added directly to the proxy class by calling the respective methods of the Compiler API.
protected buildMethodsInterceptorCode ( string $targetClassName, array $interceptedMethods ) : void
$targetClassName string The target class the pointcut should match with
$interceptedMethods array An array of method names which need to be intercepted
Résultat void

buildProxyClass() public méthode

Builds methods for a single AOP proxy class for the specified class.
public buildProxyClass ( string $targetClassName, array &$aspectContainers ) : boolean
$targetClassName string Name of the class to create a proxy class file for
$aspectContainers array
Résultat boolean TRUE if the proxy class could be built, FALSE otherwise.

findPointcut() public méthode

Traverses the aspect containers to find a pointcut from the aspect class name and pointcut method name
public findPointcut ( string $aspectClassName, string $pointcutMethodName ) : mixed
$aspectClassName string Name of the aspect class where the pointcut has been declared
$pointcutMethodName string Method name of the pointcut
Résultat mixed The Aop\Pointcut\Pointcut or FALSE if none was found

getInterfaceNamesFromIntroductions() protected méthode

Returns an array of interface names introduced by the given introductions
protected getInterfaceNamesFromIntroductions ( array $interfaceIntroductions ) : array
$interfaceIntroductions array An array of interface introductions
Résultat array Array of interface names

getIntroducedMethodsFromInterfaceIntroductions() protected méthode

Returns all methods declared by the introduced interfaces
protected getIntroducedMethodsFromInterfaceIntroductions ( array $interfaceIntroductions ) : array
$interfaceIntroductions array An array of Aop\InterfaceIntroduction
Résultat array An array of method information (interface, method name)

getMatchingInterfaceIntroductions() protected méthode

Traverses all aspect containers and returns an array of interface introductions which match the target class.
protected getMatchingInterfaceIntroductions ( array &$aspectContainers, string $targetClassName ) : array
$aspectContainers array
$targetClassName string Name of the class the pointcut should match with
Résultat array array of interface names

getMatchingPropertyIntroductions() protected méthode

Traverses all aspect containers and returns an array of property introductions which match the target class.
protected getMatchingPropertyIntroductions ( array &$aspectContainers, string $targetClassName ) : array | PropertyIntroduction[]
$aspectContainers array
$targetClassName string Name of the class the pointcut should match with
Résultat array | Neos\Flow\Aop\PropertyIntroduction[] array of property introductions

getMatchingTraitNamesFromIntroductions() protected méthode

Traverses all aspect containers and returns an array of trait introductions which match the target class.
protected getMatchingTraitNamesFromIntroductions ( array &$aspectContainers, string $targetClassName ) : array
$aspectContainers array
$targetClassName string Name of the class the pointcut should match with
Résultat array array of trait names

getMethodsFromTargetClass() protected méthode

Returns the methods of the target class.
protected getMethodsFromTargetClass ( string $targetClassName ) : array
$targetClassName string Name of the target class
Résultat array Method information with declaring class and method name pairs

getProxyableClasses() protected méthode

Determines which of the given classes are potentially proxyable and returns their names in an array.
protected getProxyableClasses ( array $classNamesByPackage ) : array
$classNamesByPackage array Names of the classes to check
Résultat array Names of classes which can be proxied

injectAdvicedConstructorInterceptorBuilder() public méthode

Injects the Adviced Constructor Interceptor Builder
public injectAdvicedConstructorInterceptorBuilder ( AdvicedConstructorInterceptorBuilder $builder ) : void
$builder AdvicedConstructorInterceptorBuilder
Résultat void

injectAdvicedMethodInterceptorBuilder() public méthode

Injects the Adviced Method Interceptor Builder
public injectAdvicedMethodInterceptorBuilder ( AdvicedMethodInterceptorBuilder $builder ) : void
$builder AdvicedMethodInterceptorBuilder
Résultat void

injectCompiler() public méthode

public injectCompiler ( Compiler $compiler ) : void
$compiler Neos\Flow\ObjectManagement\Proxy\Compiler
Résultat void

injectObjectConfigurationCache() public méthode

Injects the cache for storing information about objects
public injectObjectConfigurationCache ( Neos\Cache\Frontend\VariableFrontend $objectConfigurationCache ) : void
$objectConfigurationCache Neos\Cache\Frontend\VariableFrontend
Résultat void

injectObjectManager() public méthode

public injectObjectManager ( CompileTimeObjectManager $objectManager ) : void
$objectManager Neos\Flow\ObjectManagement\CompileTimeObjectManager
Résultat void

injectPointcutExpressionParser() public méthode

Injects an instance of the pointcut expression parser
public injectPointcutExpressionParser ( PointcutExpressionParser $pointcutExpressionParser ) : void
$pointcutExpressionParser Neos\Flow\Aop\Pointcut\PointcutExpressionParser
Résultat void

injectReflectionService() public méthode

Injects the reflection service
public injectReflectionService ( ReflectionService $reflectionService ) : void
$reflectionService Neos\Flow\Reflection\ReflectionService
Résultat void

injectSettings() public méthode

Injects the Flow settings
public injectSettings ( array $settings ) : void
$settings array The settings
Résultat void

injectSystemLogger() public méthode

public injectSystemLogger ( Neos\Flow\Log\SystemLoggerInterface $systemLogger ) : void
$systemLogger Neos\Flow\Log\SystemLoggerInterface
Résultat void

proxySubClassesOfClassToEnsureAdvices() protected méthode

Makes sure that any sub classes of an adviced class also build the advices array on construction.
protected proxySubClassesOfClassToEnsureAdvices ( string $className, ClassNameIndex $targetClassNameCandidates, ClassNameIndex $treatedSubClasses ) : ClassNameIndex
$className string The adviced class name
$targetClassNameCandidates ClassNameIndex target class names for advices
$treatedSubClasses ClassNameIndex Already treated (sub) classes to avoid duplication
Résultat ClassNameIndex The new collection of already treated classes

renderSourceHint() protected méthode

Renders a short message which gives a hint on where the currently parsed pointcut expression was defined.
protected renderSourceHint ( string $aspectClassName, string $methodName, string $tagName ) : string
$aspectClassName string
$methodName string
$tagName string
Résultat string

Property Details

$aspectContainers protected_oe property

A registry of all known aspects
protected array $aspectContainers
Résultat array

$blacklistedSubPackages protected_oe property

Hardcoded list of Flow sub packages (first 15 characters) which must be immune to AOP proxying for security, technical or conceptual reasons.
protected array $blacklistedSubPackages
Résultat array

$compiler protected_oe property

protected Compiler,Neos\Flow\ObjectManagement\Proxy $compiler
Résultat Neos\Flow\ObjectManagement\Proxy\Compiler

$methodInterceptorBuilders protected_oe property

protected array $methodInterceptorBuilders
Résultat array

$objectConfigurationCache protected_oe property

protected VariableFrontend,Neos\Cache\Frontend $objectConfigurationCache
Résultat Neos\Cache\Frontend\VariableFrontend

$objectManager protected_oe property

protected CompileTimeObjectManager,Neos\Flow\ObjectManagement $objectManager
Résultat Neos\Flow\ObjectManagement\CompileTimeObjectManager

$pointcutExpressionParser protected_oe property

An instance of the pointcut expression parser
protected PointcutExpressionParser,Neos\Flow\Aop\Pointcut $pointcutExpressionParser
Résultat Neos\Flow\Aop\Pointcut\PointcutExpressionParser

$proxyClassBuilder protected_oe property

protected ProxyClassBuilder,Neos\Flow\Aop\Builder $proxyClassBuilder
Résultat ProxyClassBuilder

$reflectionService protected_oe property

protected ReflectionService,Neos\Flow\Reflection $reflectionService
Résultat Neos\Flow\Reflection\ReflectionService

$settings protected_oe property

The Flow settings
protected array $settings
Résultat array

$systemLogger protected_oe property

protected SystemLoggerInterface,Neos\Flow\Log $systemLogger
Résultat Neos\Flow\Log\SystemLoggerInterface