initial commit
This commit is contained in:
146
vendor/symfony/maker-bundle/src/Doctrine/EntityClassGenerator.php
vendored
Normal file
146
vendor/symfony/maker-bundle/src/Doctrine/EntityClassGenerator.php
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony MakerBundle package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\MakerBundle\Doctrine;
|
||||
|
||||
use ApiPlatform\Metadata\ApiResource;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
use Symfony\Bridge\Doctrine\Types\UlidType;
|
||||
use Symfony\Bridge\Doctrine\Types\UuidType;
|
||||
use Symfony\Bundle\MakerBundle\Generator;
|
||||
use Symfony\Bundle\MakerBundle\Maker\Common\EntityIdTypeEnum;
|
||||
use Symfony\Bundle\MakerBundle\Str;
|
||||
use Symfony\Bundle\MakerBundle\Util\ClassNameDetails;
|
||||
use Symfony\Bundle\MakerBundle\Util\UseStatementGenerator;
|
||||
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
||||
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
|
||||
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Uid\Ulid;
|
||||
use Symfony\Component\Uid\Uuid;
|
||||
use Symfony\UX\Turbo\Attribute\Broadcast;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class EntityClassGenerator
|
||||
{
|
||||
public function __construct(
|
||||
private Generator $generator,
|
||||
private DoctrineHelper $doctrineHelper,
|
||||
) {
|
||||
}
|
||||
|
||||
public function generateEntityClass(ClassNameDetails $entityClassDetails, bool $apiResource, bool $withPasswordUpgrade = false, bool $generateRepositoryClass = true, bool $broadcast = false, EntityIdTypeEnum $useUuidIdentifier = EntityIdTypeEnum::INT): string
|
||||
{
|
||||
$repoClassDetails = $this->generator->createClassNameDetails(
|
||||
$entityClassDetails->getRelativeName(),
|
||||
'Repository\\',
|
||||
'Repository'
|
||||
);
|
||||
|
||||
$tableName = $this->doctrineHelper->getPotentialTableName($entityClassDetails->getFullName());
|
||||
|
||||
$useStatements = new UseStatementGenerator([
|
||||
$repoClassDetails->getFullName(),
|
||||
['Doctrine\\ORM\\Mapping' => 'ORM'],
|
||||
]);
|
||||
|
||||
if ($broadcast) {
|
||||
$useStatements->addUseStatement(Broadcast::class);
|
||||
}
|
||||
|
||||
if ($apiResource) {
|
||||
$useStatements->addUseStatement(ApiResource::class);
|
||||
}
|
||||
|
||||
if (EntityIdTypeEnum::UUID === $useUuidIdentifier) {
|
||||
$useStatements->addUseStatement([
|
||||
Uuid::class,
|
||||
UuidType::class,
|
||||
]);
|
||||
}
|
||||
|
||||
if (EntityIdTypeEnum::ULID === $useUuidIdentifier) {
|
||||
$useStatements->addUseStatement([
|
||||
Ulid::class,
|
||||
UlidType::class,
|
||||
]);
|
||||
}
|
||||
|
||||
$entityPath = $this->generator->generateClass(
|
||||
$entityClassDetails->getFullName(),
|
||||
'doctrine/Entity.tpl.php',
|
||||
[
|
||||
'use_statements' => $useStatements,
|
||||
'repository_class_name' => $repoClassDetails->getShortName(),
|
||||
'api_resource' => $apiResource,
|
||||
'broadcast' => $broadcast,
|
||||
'should_escape_table_name' => $this->doctrineHelper->isKeyword($tableName),
|
||||
'table_name' => $tableName,
|
||||
'id_type' => $useUuidIdentifier,
|
||||
]
|
||||
);
|
||||
|
||||
if ($generateRepositoryClass) {
|
||||
$this->generateRepositoryClass(
|
||||
$repoClassDetails->getFullName(),
|
||||
$entityClassDetails->getFullName(),
|
||||
$withPasswordUpgrade,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
return $entityPath;
|
||||
}
|
||||
|
||||
public function generateRepositoryClass(string $repositoryClass, string $entityClass, bool $withPasswordUpgrade, bool $includeExampleComments = true): void
|
||||
{
|
||||
$shortEntityClass = Str::getShortClassName($entityClass);
|
||||
$entityAlias = strtolower($shortEntityClass[0]);
|
||||
|
||||
$passwordUserInterfaceName = UserInterface::class;
|
||||
|
||||
if (interface_exists(PasswordAuthenticatedUserInterface::class)) {
|
||||
$passwordUserInterfaceName = PasswordAuthenticatedUserInterface::class;
|
||||
}
|
||||
|
||||
$interfaceClassNameDetails = new ClassNameDetails($passwordUserInterfaceName, 'Symfony\Component\Security\Core\User');
|
||||
|
||||
$useStatements = new UseStatementGenerator([
|
||||
$entityClass,
|
||||
ManagerRegistry::class,
|
||||
ServiceEntityRepository::class,
|
||||
]);
|
||||
|
||||
if ($withPasswordUpgrade) {
|
||||
$useStatements->addUseStatement([
|
||||
$interfaceClassNameDetails->getFullName(),
|
||||
PasswordUpgraderInterface::class,
|
||||
UnsupportedUserException::class,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->generator->generateClass(
|
||||
$repositoryClass,
|
||||
'doctrine/Repository.tpl.php',
|
||||
[
|
||||
'use_statements' => $useStatements,
|
||||
'entity_class_name' => $shortEntityClass,
|
||||
'entity_alias' => $entityAlias,
|
||||
'with_password_upgrade' => $withPasswordUpgrade,
|
||||
'password_upgrade_user_interface' => $interfaceClassNameDetails,
|
||||
'include_example_comments' => $includeExampleComments,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user