PHP Attributes
example of using attributes to register middlewares
// ControllerClass.php
#[MiddlewareAttribute(CSRFMiddleware::class)]
class ControllerClass
{
#[MiddlewareAttribute(Auth::class)]
public function get()
{
//logic
}
}
// MiddlewareAttribute.php
#[\Attribute] class MiddlewareAttribute
{
public function __construct(...$middlewares)
{
}
}
// Get middlewares
$controller = new ControllerClass();
$middlewares = [];
$reflection = new ReflectionClass($controller);
$attributes = $reflection->getAttributes(MiddlewareAttribute::class);
foreach ($attributes as $attribute) {
$arguments = $attribute->getArguments();
foreach($arguments as $argument) {
$middlewares[] = $argument;
}
}
$method = $reflection->getMethod("get");
$attributes = $method->getAttributes(MiddlewareAttribute::class);
foreach ($attributes as $attribute) {
$arguments = $attribute->getArguments();
foreach($arguments as $argument) {
$middlewares[] = $argument;
}
}