Source of file EntityClassGenerator.php

Size: 2,545 Bytes - Last Modified: 2023-11-16T22:56:03+01:00

/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/make-bundle/src/Doctrine/EntityClassGenerator.php

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
<?php
namespace TIC\MakeBundle\Doctrine;

use Symfony\Bundle\MakerBundle\Generator;
use Symfony\Bundle\MakerBundle\Str;
use Symfony\Bundle\MakerBundle\Util\ClassNameDetails;
use Symfony\Bundle\MakerBundle\Doctrine\DoctrineHelper;
use Doctrine\Common\Persistence\ManagerRegistry as LegacyManagerRegistry;

/**
 * @internal
 */
final class EntityClassGenerator
{
	protected $skelPath = __DIR__.'/../Resources/skeleton/';
	private $generator;
	private $doctrineHelper;
	private $managerRegistryClassName = LegacyManagerRegistry::class;


	public function __construct(Generator $generator, DoctrineHelper $doctrineHelper)
	{
		$this->generator      = $generator;
		$this->doctrineHelper = $doctrineHelper;
	}

	/**
	 *
	 */
	public function generateEntityClass(ClassNameDetails $entityDetails, ?string $tableName, ?bool $generateRepo = false): string
	{
		if (! $tableName) {
#			$tableName = $this->doctrineHelper->getPotentialTableName($entityDetails->getFullName());
			$tableBase = str_replace("\\", "", str_replace("\\Entity\\", "", $entityDetails->getFullName()));
			$tableName = $this->doctrineHelper->getPotentialTableName($tableBase);
		}
		$repoDetails = $this->generator->createClassNameDetails($entityDetails->getRelativeName(), "Repository\\", "Repository");
		
		$entityPath = $this->generator->generateClass(
			$entityDetails->getFullName(),
			$this->skelPath . 'doctrine/Entity.tpl.php',
			[
				'table_name' => $tableName,
				'repo_name'  => $repoDetails->getShortName(),
				'repo_class' => $repoDetails->getFullName(),
			]
		);
		
		if ($generateRepo) $this->generateRepositoryClass($repoDetails, $entityDetails);
		
		return $entityPath;
	}

	/**
	 *
	 */
	public function generateRepositoryClass(ClassNameDetails $repositoryDetails, ClassNameDetails $entityDetails)
	{
#		$entityAlias = strtolower(substr($entityDetails->getShortName(),0,1));
		$entityAlias = strtolower(preg_replace('/[^A-Z]/', '', $entityDetails->getShortName()));
		
		$this->generator->generateClass(
			$repositoryDetails->getFullName(),
			$this->skelPath . 'doctrine/Repository.tpl.php',
			[
				'entity_class'   => $entityDetails->getFullName(),
				'entity_name'    => $entityDetails->getShortName(),
				'entity_alias'   => $entityAlias,
				'registry_class' => $this->managerRegistryClassName,
			]
		);
	}

	/**
	 * Called by a compiler pass to inject the non-legacy value if available.
	 */
	public function setManagerRegistryClassName(string $managerRegistryClassName)
	{
		$this->managerRegistryClassName = $managerRegistryClassName;
	}

}