%PDF- %PDF-
Direktori : /home/emtnaeewxm/www/vendor/sensio/generator-bundle/Command/ |
Current File : /home/emtnaeewxm/www/vendor/sensio/generator-bundle/Command/GenerateCommandCommand.php |
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Sensio\Bundle\GeneratorBundle\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\Question; use Sensio\Bundle\GeneratorBundle\Generator\CommandGenerator; /** * Generates commands. * * @author Javier Eguiluz <javier.eguiluz@gmail.com> */ class GenerateCommandCommand extends GeneratorCommand { const MAX_ATTEMPTS = 5; /** * @see Command */ public function configure() { $this ->setName('generate:command') ->setDescription('Generates a console command') ->setDefinition(array( new InputArgument('bundle', InputArgument::OPTIONAL, 'The bundle where the command is generated'), new InputArgument('name', InputArgument::OPTIONAL, 'The command\'s name (e.g. app:my-command)'), )) ->setHelp(<<<EOT The <info>%command.name%</info> command helps you generate new commands inside bundles. Provide the bundle name as the first argument and the command name as the second argument: <info>php %command.full_name% AppBundle blog:publish-posts</info> If any of the arguments is missing, the command will ask for their values interactively. If you want to disable any user interaction, use <comment>--no-interaction</comment>, but don't forget to pass all needed arguments. Every generated file is based on a template. There are default templates but they can be overridden by placing custom templates in one of the following locations, by order of priority: <info>BUNDLE_PATH/Resources/SensioGeneratorBundle/skeleton/command APP_PATH/Resources/SensioGeneratorBundle/skeleton/command</info> You can check https://github.com/sensio/SensioGeneratorBundle/tree/master/Resources/skeleton in order to know the file structure of the skeleton. EOT ) ; } public function interact(InputInterface $input, OutputInterface $output) { $bundle = $input->getArgument('bundle'); $name = $input->getArgument('name'); if (null !== $bundle && null !== $name) { return; } $questionHelper = $this->getQuestionHelper(); $questionHelper->writeSection($output, 'Welcome to the Symfony command generator'); // bundle if (null !== $bundle) { $output->writeln(sprintf('Bundle name: %s', $bundle)); } else { $output->writeln(array( '', 'First, you need to give the name of the bundle where the command will', 'be generated (e.g. <comment>AppBundle</comment>)', '', )); $bundleNames = array_keys($this->getContainer()->get('kernel')->getBundles()); $question = new Question($questionHelper->getQuestion('Bundle name', $bundle), $bundle); $question->setAutocompleterValues($bundleNames); $question->setValidator(function ($answer) use ($bundleNames) { if (!in_array($answer, $bundleNames)) { throw new \RuntimeException(sprintf('Bundle "%s" does not exist.', $answer)); } return $answer; }); $question->setMaxAttempts(self::MAX_ATTEMPTS); $bundle = $questionHelper->ask($input, $output, $question); $input->setArgument('bundle', $bundle); } // command name if (null !== $name) { $output->writeln(sprintf('Command name: %s', $name)); } else { $output->writeln(array( '', 'Now, provide the name of the command as you type it in the console', '(e.g. <comment>app:my-command</comment>)', '', )); $question = new Question($questionHelper->getQuestion('Command name', $name), $name); $question->setValidator(function ($answer) { if (empty($answer)) { throw new \RuntimeException('The command name cannot be empty.'); } return $answer; }); $question->setMaxAttempts(self::MAX_ATTEMPTS); $name = $questionHelper->ask($input, $output, $question); $input->setArgument('name', $name); } // summary and confirmation $questionHelper->writeSection($output, 'Summary before generation'); $output->writeln(array( sprintf('You are going to generate a <info>%s</info> command inside <info>%s</info> bundle.', $name, $bundle), )); $question = new Question($questionHelper->getQuestion('Do you confirm generation', 'yes', '?'), true); if (!$questionHelper->ask($input, $output, $question)) { $output->writeln('<error>Command aborted</error>'); return 1; } } public function execute(InputInterface $input, OutputInterface $output) { $questionHelper = $this->getQuestionHelper(); $bundle = $input->getArgument('bundle'); $name = $input->getArgument('name'); try { $bundle = $this->getContainer()->get('kernel')->getBundle($bundle); } catch (\Exception $e) { $output->writeln(sprintf('<bg=red>Bundle "%s" does not exist.</>', $bundle)); } $generator = $this->getGenerator($bundle); $generator->generate($bundle, $name); $output->writeln(sprintf('Generated the <info>%s</info> command in <info>%s</info>', $name, $bundle->getName())); $questionHelper->writeGeneratorSummary($output, array()); } protected function createGenerator() { return new CommandGenerator($this->getContainer()->get('filesystem')); } }