<?phpnamespace App\DataFixtures;use App\Entity\User;use App\Trait\GenerateRandomStringTrait;use Doctrine\Bundle\FixturesBundle\Fixture;use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;use Doctrine\Common\DataFixtures\DependentFixtureInterface;use Doctrine\Persistence\ObjectManager;use Symfony\Component\Console\ConsoleEvents;use Symfony\Component\Console\Event\ConsoleCommandEvent;use Symfony\Component\Console\Output\OutputInterface;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;class UserFixtures extends Fixture implements DependentFixtureInterface, EventSubscriberInterface, FixtureGroupInterface { use GenerateRandomStringTrait; /** @var string */ private $superAdminEmail = 'admin@localhost'; /** @var string */ private $tenantAdminEmail = 'tenant@localhost'; /** @var OutputInterface */ private $output; /** @var string */ private $superAdminPassword; /** @var string */ private $tenantAdminPassword; /** @var UserPasswordHasherInterface */ private $passwordHasher; /** * @param UserPasswordHasherInterface $passwordHasher */ public function __construct(UserPasswordHasherInterface $passwordHasher) { $this->passwordHasher = $passwordHasher; } /** * @return string[] */ public static function getSubscribedEvents(): array { return [ ConsoleEvents::COMMAND => 'init', ]; } /** * @param ConsoleCommandEvent $event * * @return void */ public function init(ConsoleCommandEvent $event): void { $this->output = $event->getOutput(); } /** * @param ObjectManager $manager * * @return void */ public function load(ObjectManager $manager): void { // Generate random string for use as passwords $this->superAdminPassword = $this->generateRandomString(); $this->tenantAdminPassword = $this->generateRandomString(); $superAdminUser = new User(); $superAdminUser ->setFirstname('Super') ->setLastname('Admin') ->setEmail($this->superAdminEmail) ->setUsername($this->superAdminEmail) ->setRoles( [ 'ROLE_SUPER_ADMIN', ] ); $superAdminUser->setPassword( $this->passwordHasher->hashPassword( $superAdminUser, $this->superAdminPassword ) ); $manager->persist($superAdminUser); $manager->flush(); $tenantAdminUser = new User(); $tenantAdminUser ->setFirstname('ARZ') ->setLastname('Digital') ->setEmail($this->tenantAdminEmail) ->setUsername($this->tenantAdminEmail) ->setRoles( [ 'ROLE_TENANT_ADMIN', ] ) /** @phpstan-ignore-next-line */ ->setTenant($this->getReference(TenantFixtures::TENANT_REFERENCE)); $tenantAdminUser->setPassword( $this->passwordHasher->hashPassword( $tenantAdminUser, $this->tenantAdminPassword ) ); $manager->persist($tenantAdminUser); $manager->flush(); // Display login user data to console $this->output->writeln(''); $this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->superAdminEmail}</> created with password <fg=yellow;options=bold>{$this->superAdminPassword}</></comment>"); $this->output->writeln(''); $this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->tenantAdminEmail}</> created with password <fg=yellow;options=bold>{$this->tenantAdminPassword}</></comment>"); $this->output->writeln(''); } /** * @return string[] */ public function getDependencies(): array { return [ TenantFixtures::class, ]; } /** * @return string[] */ public static function getGroups(): array { return ['prod', 'test']; }}