callbackMetadata = $extractor->extract($guard); } catch (\InvalidArgumentException) { // Fallback: Closure (nicht cachebar) $this->callbackMetadata = null; } } public function execute(AttributeExecutionContext $context): mixed { $callbackExecutor = $context->container->get(CallbackExecutor::class); // Wenn Metadata vorhanden, nutze sie für Ausführung if ($this->callbackMetadata !== null) { $result = $callbackExecutor->execute($this->callbackMetadata, $context); // Wenn Factory-Pattern, führe Closure aus if ($result instanceof Closure) { return $result($context); } return $result; } // Fallback: Direkte Closure-Ausführung (nicht empfohlen) if ($this->guard instanceof Closure) { return ($this->guard)($context); } throw new \RuntimeException( 'Guard callback must be a Handler class, First-Class Callable, or Factory. Direct closures are not supported.' ); } /** * Gibt die Callback-Metadata zurück (für Cache-Serialisierung) */ public function getCallbackMetadata(): ?CallbackMetadata { return $this->callbackMetadata; } }