Select Git revision
CapsuleFixtures.php

Camille Simiand authored
CapsuleFixtures.php 3.17 KiB
<?php
namespace App\DataFixtures;
use App\Builder\CapsuleBuilder;
use App\Entity\User;
use DateTime;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Uid\Uuid;
class CapsuleFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager): void
{
$user_repository = $manager->getRepository(User::class);
$verified_user1 = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]);
if (! $verified_user1 instanceof User) {
throw new \Exception("User does not exist.");
}
$verified_user2 = $user_repository->findOneBy(['email' => "defaultUser2@localhost.com"]);
if (! $verified_user2 instanceof User) {
throw new \Exception("User does not exist.");
}
$new_date_time = new DateTime();
$persistent_capsule_factory = $this->createCapsulePersistentFactory($manager);
$persistent_capsule_factory(
function (CapsuleBuilder $builder) use (
$verified_user1,
$new_date_time
) {
$uuid = Uuid::v4();
$password = sha1(random_bytes(100));
$builder
->withName("Pomme")
->withCreationAuthor($verified_user1)
->withCreationDate($new_date_time)
->withUpdateDate($new_date_time)
->withLinkPath($uuid)
->withPassword($password);
}
);
$persistent_capsule_factory(
function (CapsuleBuilder $builder) use (
$verified_user2,
$new_date_time
) {
$uuid = Uuid::v4();
$password = sha1(random_bytes(100));
$builder
->withName("Adele")
->withCreationAuthor($verified_user2)
->withCreationDate($new_date_time)
->withUpdateDate($new_date_time)
->withLinkPath($uuid)
->withPassword($password);
}
);
$manager->flush();
}
/**
* Create a capsule using the callable parameter, save the result within the ObjectManage,
* then return the created capsule.
* @param ObjectManager $manager
* @return callable function(callable $builderAction): void { ... }
* <ul>
* <li>The $builderAction should take one parameter of type CapsuleBuilder</li>
* </ul>
*/
private function createCapsulePersistentFactory(ObjectManager $manager): callable
{
return function (callable $builderAction) use ($manager) {
$capsuleBuilder = new CapsuleBuilder();
$builderAction($capsuleBuilder);
$newCapsule = $capsuleBuilder->createCapsule();
$manager->persist($newCapsule);
return $newCapsule;
};
}
public function getDependencies(): array
{
return [
UserFixtures::class,
];
}
}