passwordEncoder = $passwordEncoder; $this->entityManager = $entityManager; } /** * {@inheritdoc} */ protected function configure() { $this ->setName('user:create') ->setDescription('Create a user.') ->setDefinition(array( new InputArgument('email', InputArgument::REQUIRED, 'The email'), new InputArgument('password', InputArgument::REQUIRED, 'The password'), new InputOption('super-admin', null, InputOption::VALUE_NONE, 'Set the user as super admin (ROLE_SUPER_ADMIN)'), )) ->setHelp(<<<'EOT' The user:create command creates a user: php %command.full_name% romaric@netinfluence.ch This interactive shell will ask you for a password. You can create a super admin via the super-admin flag: php %command.full_name% admin --super-admin EOT ); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $email = $input->getArgument('email'); $password = $input->getArgument('password'); $superadmin = $input->getOption('super-admin'); $user = (new User()) ->setEmail($email) ->setRoles($superadmin ? ['ROLE_SUPER_ADMIN'] : ['ROLE_USER']) ; $password = $this->passwordEncoder->encodePassword($user, $password); $user->setPassword($password); $this->entityManager->persist($user); $this->entityManager->flush(); $output->writeln(sprintf('Created user %s', $email)); } /** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $questions = array(); if (!$input->getArgument('password')) { $question = new Question('Please choose a password:'); $question->setValidator(function ($password) { if (empty($password)) { throw new \Exception('Password can not be empty'); } return $password; }); $question->setHidden(true); $questions['password'] = $question; } foreach ($questions as $name => $question) { $answer = $this->getHelper('question')->ask($input, $output, $question); $input->setArgument($name, $answer); } } }