53 lines
1.6 KiB
PHP
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;
|
|
}
|
|
}
|