init
This commit is contained in:
81
backend/vendor/symfony/doctrine-bridge/IdGenerator/UuidGenerator.php
vendored
Normal file
81
backend/vendor/symfony/doctrine-bridge/IdGenerator/UuidGenerator.php
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony 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\Bridge\Doctrine\IdGenerator;
|
||||
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Id\AbstractIdGenerator;
|
||||
use Symfony\Component\Uid\Factory\NameBasedUuidFactory;
|
||||
use Symfony\Component\Uid\Factory\RandomBasedUuidFactory;
|
||||
use Symfony\Component\Uid\Factory\TimeBasedUuidFactory;
|
||||
use Symfony\Component\Uid\Factory\UuidFactory;
|
||||
use Symfony\Component\Uid\Uuid;
|
||||
|
||||
final class UuidGenerator extends AbstractIdGenerator
|
||||
{
|
||||
private readonly UuidFactory $protoFactory;
|
||||
private UuidFactory|NameBasedUuidFactory|RandomBasedUuidFactory|TimeBasedUuidFactory $factory;
|
||||
private ?string $entityGetter = null;
|
||||
|
||||
public function __construct(?UuidFactory $factory = null)
|
||||
{
|
||||
$this->protoFactory = $this->factory = $factory ?? new UuidFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
* doctrine/orm < 2.11 BC layer.
|
||||
*/
|
||||
public function generate(EntityManager $em, $entity): Uuid
|
||||
{
|
||||
return $this->generateId($em, $entity);
|
||||
}
|
||||
|
||||
public function generateId(EntityManagerInterface $em, $entity): Uuid
|
||||
{
|
||||
if (null !== $this->entityGetter) {
|
||||
if (\is_callable([$entity, $this->entityGetter])) {
|
||||
return $this->factory->create($entity->{$this->entityGetter}());
|
||||
}
|
||||
|
||||
return $this->factory->create($entity->{$this->entityGetter});
|
||||
}
|
||||
|
||||
return $this->factory->create();
|
||||
}
|
||||
|
||||
public function nameBased(string $entityGetter, Uuid|string|null $namespace = null): static
|
||||
{
|
||||
$clone = clone $this;
|
||||
$clone->factory = $clone->protoFactory->nameBased($namespace);
|
||||
$clone->entityGetter = $entityGetter;
|
||||
|
||||
return $clone;
|
||||
}
|
||||
|
||||
public function randomBased(): static
|
||||
{
|
||||
$clone = clone $this;
|
||||
$clone->factory = $clone->protoFactory->randomBased();
|
||||
$clone->entityGetter = null;
|
||||
|
||||
return $clone;
|
||||
}
|
||||
|
||||
public function timeBased(Uuid|string|null $node = null): static
|
||||
{
|
||||
$clone = clone $this;
|
||||
$clone->factory = $clone->protoFactory->timeBased($node);
|
||||
$clone->entityGetter = null;
|
||||
|
||||
return $clone;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user