protected function processRepositoryFactoryEntities(Code\ClassType $class)
{
if (empty($this->postCompileRepositoriesQueue)) {
return;
}
$dic = self::evalAndInstantiateContainer($class);
foreach ($this->postCompileRepositoriesQueue as $manager => $items) {
$config = $this->managerConfigs[$manager];
/** @var Kdyby\Doctrine\EntityManager $entityManager */
$entityManager = $dic->getService($this->configuredManagers[$manager]);
/** @var Doctrine\ORM\Mapping\ClassMetadata $entityMetadata */
$metadataFactory = $entityManager->getMetadataFactory();
$allMetadata = [];
foreach ($metadataFactory->getAllMetadata() as $entityMetadata) {
if ($config['defaultRepositoryClassName'] === $entityMetadata->customRepositoryClassName || empty($entityMetadata->customRepositoryClassName)) {
continue;
}
$allMetadata[ltrim($entityMetadata->customRepositoryClassName, '\\')] = $entityMetadata;
}
foreach ($items as $item) {
if (!isset($allMetadata[$item[0]])) {
throw new Nette\Utils\AssertionException(sprintf('Repository class %s have been found in DIC, but no entity has it assigned and it has no entity configured', $item[0]));
}
$entityMetadata = $allMetadata[$item[0]];
$serviceMethod = Nette\DI\Container::getMethodName($item[1]);
$method = $class->getMethod($serviceMethod);
$methodBody = $method->getBody();
$method->setBody(str_replace('"%entityName%"', Code\Helpers::format('?', $entityMetadata->getName()), $methodBody));
}
}
}