* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bundle\MakerBundle\Maker; use Symfony\Bundle\MakerBundle\ConsoleStyle; use Symfony\Bundle\MakerBundle\DependencyBuilder; use Symfony\Bundle\MakerBundle\Generator; use Symfony\Bundle\MakerBundle\InputConfiguration; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** * @author Javier Eguiluz * @author Ryan Weaver */ final class MakeVoter extends AbstractMaker { public static function getCommandName(): string { return 'make:voter'; } public static function getCommandDescription(): string { return 'Creates a new security voter class'; } public function configureCommand(Command $command, InputConfiguration $inputConfig): void { $command ->addArgument('name', InputArgument::OPTIONAL, 'The name of the security voter class (e.g. BlogPostVoter)') ->setHelp(file_get_contents(__DIR__.'/../Resources/help/MakeVoter.txt')) ; } public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void { $voterClassNameDetails = $generator->createClassNameDetails( $input->getArgument('name'), 'Security\\Voter\\', 'Voter' ); $generator->generateClass( $voterClassNameDetails->getFullName(), 'security/Voter.tpl.php', [ 'use_type_hints' => 50000 <= Kernel::VERSION_ID, ] ); $generator->writeChanges(); $this->writeSuccessMessage($io); $io->text([ 'Next: Open your voter and add your logic.', 'Find the documentation at https://symfony.com/doc/current/security/voters.html', ]); } public function configureDependencies(DependencyBuilder $dependencies): void { $dependencies->addClassDependency( Voter::class, 'security' ); } }