src/DataFixtures/UserFixtures.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\DataFixtures;
  3. use App\Entity\User;
  4. use App\Trait\GenerateRandomStringTrait;
  5. use Doctrine\Bundle\FixturesBundle\Fixture;
  6. use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
  7. use Doctrine\Common\DataFixtures\DependentFixtureInterface;
  8. use Doctrine\Persistence\ObjectManager;
  9. use Symfony\Component\Console\ConsoleEvents;
  10. use Symfony\Component\Console\Event\ConsoleCommandEvent;
  11. use Symfony\Component\Console\Output\OutputInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. class UserFixtures extends Fixture implements DependentFixtureInterfaceEventSubscriberInterfaceFixtureGroupInterface {
  15.     use GenerateRandomStringTrait;
  16.     /** @var string */
  17.     private $superAdminEmail 'admin@localhost';
  18.     /** @var string */
  19.     private $tenantAdminEmail 'tenant@localhost';
  20.     /** @var OutputInterface */
  21.     private $output;
  22.     /** @var string */
  23.     private $superAdminPassword;
  24.     /** @var string */
  25.     private $tenantAdminPassword;
  26.     /** @var UserPasswordHasherInterface */
  27.     private $passwordHasher;
  28.     /**
  29.      * @param UserPasswordHasherInterface $passwordHasher
  30.      */
  31.     public function __construct(UserPasswordHasherInterface $passwordHasher) {
  32.         $this->passwordHasher $passwordHasher;
  33.     }
  34.     /**
  35.      * @return string[]
  36.      */
  37.     public static function getSubscribedEvents(): array {
  38.         return [
  39.             ConsoleEvents::COMMAND => 'init',
  40.         ];
  41.     }
  42.     /**
  43.      * @param ConsoleCommandEvent $event
  44.      *
  45.      * @return void
  46.      */
  47.     public function init(ConsoleCommandEvent $event): void {
  48.         $this->output $event->getOutput();
  49.     }
  50.     /**
  51.      * @param ObjectManager $manager
  52.      *
  53.      * @return void
  54.      */
  55.     public function load(ObjectManager $manager): void {
  56.         // Generate random string for use as passwords
  57.         $this->superAdminPassword $this->generateRandomString();
  58.         $this->tenantAdminPassword $this->generateRandomString();
  59.         $superAdminUser = new User();
  60.         $superAdminUser
  61.             ->setFirstname('Super')
  62.             ->setLastname('Admin')
  63.             ->setEmail($this->superAdminEmail)
  64.             ->setUsername($this->superAdminEmail)
  65.             ->setRoles(
  66.                 [
  67.                     'ROLE_SUPER_ADMIN',
  68.                 ]
  69.             );
  70.         $superAdminUser->setPassword(
  71.             $this->passwordHasher->hashPassword(
  72.                 $superAdminUser,
  73.                 $this->superAdminPassword
  74.             )
  75.         );
  76.         $manager->persist($superAdminUser);
  77.         $manager->flush();
  78.         $tenantAdminUser = new User();
  79.         $tenantAdminUser
  80.             ->setFirstname('ARZ')
  81.             ->setLastname('Digital')
  82.             ->setEmail($this->tenantAdminEmail)
  83.             ->setUsername($this->tenantAdminEmail)
  84.             ->setRoles(
  85.                 [
  86.                     'ROLE_TENANT_ADMIN',
  87.                 ]
  88.             )
  89.             /** @phpstan-ignore-next-line */
  90.             ->setTenant($this->getReference(TenantFixtures::TENANT_REFERENCE));
  91.         $tenantAdminUser->setPassword(
  92.             $this->passwordHasher->hashPassword(
  93.                 $tenantAdminUser,
  94.                 $this->tenantAdminPassword
  95.             )
  96.         );
  97.         $manager->persist($tenantAdminUser);
  98.         $manager->flush();
  99.         // Display login user data to console
  100.         $this->output->writeln('');
  101.         $this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->superAdminEmail}</> created with password <fg=yellow;options=bold>{$this->superAdminPassword}</></comment>");
  102.         $this->output->writeln('');
  103.         $this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->tenantAdminEmail}</> created with password <fg=yellow;options=bold>{$this->tenantAdminPassword}</></comment>");
  104.         $this->output->writeln('');
  105.     }
  106.     /**
  107.      * @return string[]
  108.      */
  109.     public function getDependencies(): array {
  110.         return [
  111.             TenantFixtures::class,
  112.         ];
  113.     }
  114.     /**
  115.      * @return string[]
  116.      */
  117.     public static function getGroups(): array {
  118.         return ['prod''test'];
  119.     }
  120. }