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 DependentFixtureInterface, EventSubscriberInterface, FixtureGroupInterface {
  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. }