diff --git a/CHANGELOG.md b/CHANGELOG.md index a8cceb1..a62b3d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.1.1 * fix: Fix missing `kernel.reset` tags. +* fix: Proxy generation under `opcache` and/or `classmap-authoritative` ## 1.1.0 diff --git a/composer.json b/composer.json index fffa948..11a972c 100644 --- a/composer.json +++ b/composer.json @@ -36,6 +36,7 @@ "symfony/property-access": "^6.4 || ^7.0", "symfony/property-info": "^6.4 || ^7.0", "symfony/serializer": "^6.4 || ^7.0", + "symfony/service-contracts": "^3.0", "symfony/var-exporter": "^6.4.1 || ^6.5 || ^7.0.1 || ^7.1" }, "require-dev": { diff --git a/src/Proxy/Implementation/ProxyFactory.php b/src/Proxy/Implementation/ProxyFactory.php index 6b0add3..2d7db93 100644 --- a/src/Proxy/Implementation/ProxyFactory.php +++ b/src/Proxy/Implementation/ProxyFactory.php @@ -44,11 +44,15 @@ public function createProxy( ): object { $targetProxyClass = ProxyNamer::generateProxyClassName($class); - if (!class_exists($targetProxyClass, false)) { + if (!class_exists($targetProxyClass)) { $sourceCode = $this->proxyGenerator ->generateProxyCode($class, $targetProxyClass); $this->proxyRegistry->registerProxy($targetProxyClass, $sourceCode); + // @phpstan-ignore-next-line + eval($sourceCode); + + // @phpstan-ignore-next-line if (!class_exists($targetProxyClass)) { throw new LogicException( sprintf('Unable to find target proxy class "%s".', $targetProxyClass), diff --git a/src/Proxy/Implementation/ProxyGenerator.php b/src/Proxy/Implementation/ProxyGenerator.php index d153974..66735ec 100644 --- a/src/Proxy/Implementation/ProxyGenerator.php +++ b/src/Proxy/Implementation/ProxyGenerator.php @@ -53,7 +53,7 @@ private function generateProxySourceCode(string $realClass, string $proxyClass): sprintf('namespace %s;', $namespace) . "\n\n" . sprintf( 'final %sclass %s%s', - $targetReflection->isReadOnly() ? 'readonly ' : ' ', + $targetReflection->isReadOnly() ? 'readonly ' : '', $shortName, ProxyHelper::generateLazyGhost($targetReflection) ); @@ -62,10 +62,6 @@ private function generateProxySourceCode(string $realClass, string $proxyClass): private function getClassHeader(): string { return <<<'PHP' -