• Как добавить первичного администратора в Symfony?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    Если используется FOSUserBundle, то надо использовать команду
    bin/console fos:user:create username em@ai.il 'p@55w0rd'
    .

    В случае своего решения, эта команду надо создать самому. У меня она выглядит как-то так (по сути повторяет код экшена контроллера со своими нюансами)

    CreateCommand

    /**
     * @psalm-suppress PropertyNotSetInConstructor
     */
    class CreateCommand extends AbstractCommand
    {
        private DocumentManager $documentManager;
        private ValidatorInterface $validator;
        private PasswordGenerator $passwordGenerator;
        private AdministratorMapper $mapper;
    
        public function __construct(
            DocumentManager $documentManager,
            ValidatorInterface $validator,
            PasswordGenerator $passwordGenerator,
            AdministratorMapper $mapper
        ) {
            parent::__construct();
    
            $this->documentManager = $documentManager;
            $this->validator = $validator;
            $this->passwordGenerator = $passwordGenerator;
            $this->mapper = $mapper;
        }
    
        /**
         * @psalm-suppress MissingReturnType
         */
        protected function configure()
        {
            $this
                ->setName('app:administrator:create')
                ->addArgument('username', InputArgument::REQUIRED, 'Username')
                ->addOption('password', 'p', InputOption::VALUE_REQUIRED, 'Password')
                ->setDescription('Creates administrator')
            ;
        }
        
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            /** @var string $username */
            $username = $input->getArgument('username');
            /** @var string|null $plainPassword */
            $plainPassword = $input->getOption('password');
            if (!$plainPassword) {
                $plainPassword = $this->passwordGenerator->generate();
            }
    
            $model = new AdministratorModel();
            $model->enabled = true;
            $model->username = $username;
            $model->password = $plainPassword;
    
            $errors = $this->validator->validate($model);
            if (\count($errors) > 0) {
                $this->io->error('Can\'t create administrator');
                $this->printConstraintViolations($errors);
    
                return 1;
            }
    
            $administrator = $this->mapper->map($model);
    
            $this->documentManager->persist($administrator);
            $this->documentManager->flush();
    
            $this->io->writeln(sprintf('Administrator <info>%s</info> with password <info>%s</info> has been created', $administrator->getUsername(), $plainPassword));
    
            return 0;
        }
    }



    bin/console app:administrator:create vasx3

    Создавать пользователей, а тем более администраторов, через миграции и фикстуры - риск, т.к. в случае утечки кода все эти данные будут доступны третьим лицам
    Ответ написан
    4 комментария
  • С чего начать админку на symfony?

    @ArtemioVegas
    php developer
    Можно попробовать EasyAdminBundle
    Полегче чем Соната будет.
    + Есть туториал от KNPUniversity
    Ответ написан
    Комментировать