AttributeProcessor
in package
implements
MiddlewareInterface
Processes PHP 8 attributes on registered classes
Interfaces, Classes, Traits and Enums
Table of Contents
- $config : ConfigInterface|null
- $handlerClasses : array<string|int, mixed>
- $handlers : array<string|int, mixed>
- $namespaces : array<string|int, mixed>
- __construct() : mixed
- add() : void
- Adds an attribute handler for processing
- addNamespace() : void
- Adds a namespace
- run() : void
- Runs the middleware
- createHandlersPerTarget() : void
- Creates the handler instances and puts them into the right `$handlers` array
- discoverClassesFromNamespaces() : void
- Discovers classes from Composer PSR-4 autoload map for configured namespaces
- isProcessAllowed() : bool
- If no namespace added returns true, otherwise checks the namespace and returns true if the interface is in it.
- loadNamespacesFromConfig() : void
- Reads `app.scan_namespaces` from config and merges with programmatically added namespaces
- process() : void
- Processes one class with the given name
- processAll() : void
- Processes all interfaces in the App or those that are in the given namespaces
- processClass() : void
- Processes all class-level attributes for the class
- processMethods() : void
- Processes all method-level attributes for all the methods of a class
- processProperties() : void
- Processes all property-level attributes for all the properties of a class
- processSubject() : void
- Processes attributes on a class, property or method
- scanDirectory() : array<string|int, string>
- Recursively scans a directory for PHP files and derives FQCNs
Properties
$config
protected
ConfigInterface|null
$config
= null
$handlerClasses
protected
array<string|int, mixed>
$handlerClasses
= []
$handlers
protected
array<string|int, mixed>
$handlers
= [\Dynart\Micro\AttributeHandlerInterface::TARGET_CLASS => [], \Dynart\Micro\AttributeHandlerInterface::TARGET_PROPERTY => [], \Dynart\Micro\AttributeHandlerInterface::TARGET_METHOD => []]
$namespaces
protected
array<string|int, mixed>
$namespaces
= []
Methods
__construct()
public
__construct([ConfigInterface|null $config = null ]) : mixed
Parameters
- $config : ConfigInterface|null = null
Return values
mixed —add()
Adds an attribute handler for processing
public
add(string $className) : void
The given class name should implement the AttributeHandler interface, otherwise it will throw a MicroException.
Parameters
- $className : string
-
The class name
Tags
Return values
void —addNamespace()
Adds a namespace
public
addNamespace(string $namespace) : void
If one or more namespace added only those will be processed. The namespace should NOT start with a backslash!
Parameters
- $namespace : string
Return values
void —run()
Runs the middleware
public
run() : void
Return values
void —createHandlersPerTarget()
Creates the handler instances and puts them into the right `$handlers` array
protected
createHandlersPerTarget() : void
Return values
void —discoverClassesFromNamespaces()
Discovers classes from Composer PSR-4 autoload map for configured namespaces
protected
discoverClassesFromNamespaces() : void
Scans directories matching the configured namespaces, derives FQCNs from file paths, and registers them with Micro::add(). Skips interfaces, abstract classes, and traits.
Return values
void —isProcessAllowed()
If no namespace added returns true, otherwise checks the namespace and returns true if the interface is in it.
protected
isProcessAllowed(string $className) : bool
Parameters
- $className : string
-
The name of the class
Return values
bool —Should we process this class?
loadNamespacesFromConfig()
Reads `app.scan_namespaces` from config and merges with programmatically added namespaces
protected
loadNamespacesFromConfig() : void
Return values
void —process()
Processes one class with the given name
protected
process(string $className) : void
Parameters
- $className : string
-
The name of the class
Return values
void —processAll()
Processes all interfaces in the App or those that are in the given namespaces
protected
processAll() : void
Return values
void —processClass()
Processes all class-level attributes for the class
protected
processClass(ReflectionClass $refClass) : void
Parameters
- $refClass : ReflectionClass
Return values
void —processMethods()
Processes all method-level attributes for all the methods of a class
protected
processMethods(ReflectionClass $refClass) : void
Parameters
- $refClass : ReflectionClass
Return values
void —processProperties()
Processes all property-level attributes for all the properties of a class
protected
processProperties(ReflectionClass $refClass) : void
Parameters
- $refClass : ReflectionClass
Return values
void —processSubject()
Processes attributes on a class, property or method
protected
processSubject(AttributeHandler $handler, string $className, ReflectionClass|ReflectionProperty|ReflectionMethod $subject) : void
Gets the PHP 8 attributes from the subject that match the handler's attribute class, instantiates each and calls the handler's handle() method.
Parameters
- $handler : AttributeHandler
-
The attribute handler
- $className : string
-
The class name
- $subject : ReflectionClass|ReflectionProperty|ReflectionMethod
-
The reflection class, property or method
Return values
void —scanDirectory()
Recursively scans a directory for PHP files and derives FQCNs
protected
scanDirectory(string $dir, string $namespacePrefix[, string $subPath = '' ]) : array<string|int, string>
Parameters
- $dir : string
-
The directory to scan
- $namespacePrefix : string
-
The PSR-4 namespace prefix (e.g. "App\")
- $subPath : string = ''
-
Additional sub-path within the namespace (e.g. "Controllers")
Return values
array<string|int, string> —Array of fully-qualified class names