caisse-bliss/vendor/doctrine/doctrine-bundle/CacheWarmer/DoctrineMetadataCacheWarmer...

53 lines
1.6 KiB
PHP

<?php
namespace Doctrine\Bundle\DoctrineBundle\CacheWarmer;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\Mapping\AbstractClassMetadataFactory;
use LogicException;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\AbstractPhpFileCacheWarmer;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
use function is_file;
class DoctrineMetadataCacheWarmer extends AbstractPhpFileCacheWarmer
{
private EntityManagerInterface $entityManager;
private string $phpArrayFile;
public function __construct(EntityManagerInterface $entityManager, string $phpArrayFile)
{
$this->entityManager = $entityManager;
$this->phpArrayFile = $phpArrayFile;
parent::__construct($phpArrayFile);
}
/**
* It must not be optional because it should be called before ProxyCacheWarmer which is not optional.
*/
public function isOptional(): bool
{
return false;
}
/** @param string $cacheDir */
protected function doWarmUp($cacheDir, ArrayAdapter $arrayAdapter): bool
{
// cache already warmed up, no needs to do it again
if (is_file($this->phpArrayFile)) {
return false;
}
$metadataFactory = $this->entityManager->getMetadataFactory();
if ($metadataFactory instanceof AbstractClassMetadataFactory && $metadataFactory->getLoadedMetadata()) {
throw new LogicException('DoctrineMetadataCacheWarmer must load metadata first, check priority of your warmers.');
}
$metadataFactory->setCache($arrayAdapter);
$metadataFactory->getAllMetadata();
return true;
}
}