vendor/symfony/console/Command/LazyCommand.php line 120

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Console\Command;
  11. use Symfony\Component\Console\Application;
  12. use Symfony\Component\Console\Completion\CompletionInput;
  13. use Symfony\Component\Console\Completion\CompletionSuggestions;
  14. use Symfony\Component\Console\Helper\HelperSet;
  15. use Symfony\Component\Console\Input\InputDefinition;
  16. use Symfony\Component\Console\Input\InputInterface;
  17. use Symfony\Component\Console\Output\OutputInterface;
  18. /**
  19.  * @author Nicolas Grekas <p@tchwork.com>
  20.  */
  21. final class LazyCommand extends Command
  22. {
  23.     private $command;
  24.     private $isEnabled;
  25.     public function __construct(string $name, array $aliasesstring $descriptionbool $isHidden\Closure $commandFactory, ?bool $isEnabled true)
  26.     {
  27.         $this->setName($name)
  28.             ->setAliases($aliases)
  29.             ->setHidden($isHidden)
  30.             ->setDescription($description);
  31.         $this->command $commandFactory;
  32.         $this->isEnabled $isEnabled;
  33.     }
  34.     public function ignoreValidationErrors(): void
  35.     {
  36.         $this->getCommand()->ignoreValidationErrors();
  37.     }
  38.     public function setApplication(Application $application null): void
  39.     {
  40.         if ($this->command instanceof parent) {
  41.             $this->command->setApplication($application);
  42.         }
  43.         parent::setApplication($application);
  44.     }
  45.     public function setHelperSet(HelperSet $helperSet): void
  46.     {
  47.         if ($this->command instanceof parent) {
  48.             $this->command->setHelperSet($helperSet);
  49.         }
  50.         parent::setHelperSet($helperSet);
  51.     }
  52.     public function isEnabled(): bool
  53.     {
  54.         return $this->isEnabled ?? $this->getCommand()->isEnabled();
  55.     }
  56.     public function run(InputInterface $inputOutputInterface $output): int
  57.     {
  58.         return $this->getCommand()->run($input$output);
  59.     }
  60.     public function complete(CompletionInput $inputCompletionSuggestions $suggestions): void
  61.     {
  62.         $this->getCommand()->complete($input$suggestions);
  63.     }
  64.     /**
  65.      * @return $this
  66.      */
  67.     public function setCode(callable $code): self
  68.     {
  69.         $this->getCommand()->setCode($code);
  70.         return $this;
  71.     }
  72.     /**
  73.      * @internal
  74.      */
  75.     public function mergeApplicationDefinition(bool $mergeArgs true): void
  76.     {
  77.         $this->getCommand()->mergeApplicationDefinition($mergeArgs);
  78.     }
  79.     /**
  80.      * @return $this
  81.      */
  82.     public function setDefinition($definition): self
  83.     {
  84.         $this->getCommand()->setDefinition($definition);
  85.         return $this;
  86.     }
  87.     public function getDefinition(): InputDefinition
  88.     {
  89.         return $this->getCommand()->getDefinition();
  90.     }
  91.     public function getNativeDefinition(): InputDefinition
  92.     {
  93.         return $this->getCommand()->getNativeDefinition();
  94.     }
  95.     /**
  96.      * @return $this
  97.      */
  98.     public function addArgument(string $nameint $mode nullstring $description ''$default null): self
  99.     {
  100.         $this->getCommand()->addArgument($name$mode$description$default);
  101.         return $this;
  102.     }
  103.     /**
  104.      * @return $this
  105.      */
  106.     public function addOption(string $name$shortcut nullint $mode nullstring $description ''$default null): self
  107.     {
  108.         $this->getCommand()->addOption($name$shortcut$mode$description$default);
  109.         return $this;
  110.     }
  111.     /**
  112.      * @return $this
  113.      */
  114.     public function setProcessTitle(string $title): self
  115.     {
  116.         $this->getCommand()->setProcessTitle($title);
  117.         return $this;
  118.     }
  119.     /**
  120.      * @return $this
  121.      */
  122.     public function setHelp(string $help): self
  123.     {
  124.         $this->getCommand()->setHelp($help);
  125.         return $this;
  126.     }
  127.     public function getHelp(): string
  128.     {
  129.         return $this->getCommand()->getHelp();
  130.     }
  131.     public function getProcessedHelp(): string
  132.     {
  133.         return $this->getCommand()->getProcessedHelp();
  134.     }
  135.     public function getSynopsis(bool $short false): string
  136.     {
  137.         return $this->getCommand()->getSynopsis($short);
  138.     }
  139.     /**
  140.      * @return $this
  141.      */
  142.     public function addUsage(string $usage): self
  143.     {
  144.         $this->getCommand()->addUsage($usage);
  145.         return $this;
  146.     }
  147.     public function getUsages(): array
  148.     {
  149.         return $this->getCommand()->getUsages();
  150.     }
  151.     /**
  152.      * @return mixed
  153.      */
  154.     public function getHelper(string $name)
  155.     {
  156.         return $this->getCommand()->getHelper($name);
  157.     }
  158.     public function getCommand(): parent
  159.     {
  160.         if (!$this->command instanceof \Closure) {
  161.             return $this->command;
  162.         }
  163.         $command $this->command = ($this->command)();
  164.         $command->setApplication($this->getApplication());
  165.         if (null !== $this->getHelperSet()) {
  166.             $command->setHelperSet($this->getHelperSet());
  167.         }
  168.         $command->setName($this->getName())
  169.             ->setAliases($this->getAliases())
  170.             ->setHidden($this->isHidden())
  171.             ->setDescription($this->getDescription());
  172.         // Will throw if the command is not correctly initialized.
  173.         $command->getDefinition();
  174.         return $command;
  175.     }
  176. }