Files
piratepoet/lib/Doctrine/ProxyClassNameResolver.php
Rostislav Wolny f77392ade4 Workaround doctrine serialisation issue in integration tests
Doctrine uses a default ProxyClassNameResolver but it is implemented
as an anonymous class and can not be serialised. This commit adds a custom
ProxyClassNameResolver that copies the anonymous one so that we avoid using the
anonymous fallback.
[MAILPOET-3658]
2021-07-06 13:29:00 +02:00

28 lines
1016 B
PHP

<?php
namespace MailPoet\Doctrine;
use MailPoetVendor\Doctrine\Persistence\Mapping\ProxyClassNameResolver as IProxyClassNameResolver;
/**
* This is exact copy of an anonymous class from \MailPoetVendor\Doctrine\Persistence\Mapping\AbstractClassMetadataFactory
* We need to use a non-anonymous class so that it is serializable within integration tests
* @see https://github.com/doctrine/persistence/blob/2.2.x/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php#L516-L536
*/
class ProxyClassNameResolver implements IProxyClassNameResolver {
/**
* @template T
* @return class-string<T>
*/
public function resolveClassName(string $className) : string {
$pos = \strrpos($className, '\\' . \MailPoetVendor\Doctrine\Persistence\Proxy::MARKER . '\\');
if ($pos === \false) {
/** @var class-string<T> */
return $className;
}
/** @var class-string<T> */
return \substr($className, $pos + \MailPoetVendor\Doctrine\Persistence\Proxy::MARKER_LENGTH + 2);
}
}