Exemplo n.º 1
0
 /**
  * Renders table row.
  *
  * Example: | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
  *
  * @param array  $row
  * @param string $cellFormat
  */
 private function renderRow(array $row, $cellFormat)
 {
     if (empty($row)) {
         return;
     }
     $this->renderColumnSeparator();
     for ($column = 0, $count = $this->getNumberOfColumns(); $column < $count; $column++) {
         $this->renderCell($row, $column, $cellFormat);
         $this->renderColumnSeparator();
     }
     $this->output->writeln('');
 }
Exemplo n.º 2
0
 /**
  * Finishes the progress output.
  */
 public function finish()
 {
     if (null === $this->startTime) {
         throw new \LogicException('You must start the progress bar before calling finish().');
     }
     if (null !== $this->startTime) {
         if (!$this->max) {
             $this->barChar = $this->barCharOriginal;
             $this->display(true);
         }
         $this->startTime = null;
         $this->output->writeln('');
         $this->output = null;
     }
 }
Exemplo n.º 3
0
 /**
  * Validates an attempt.
  *
  * @param callable        $interviewer  A callable that will ask for a question and return the result
  * @param OutputInterface $output       An Output instance
  * @param Question        $question     A Question instance
  *
  * @return string   The validated response
  *
  * @throws \Exception In case the max number of attempts has been reached and no valid response has been given
  */
 private function validateAttempts($interviewer, OutputInterface $output, Question $question)
 {
     $error = null;
     $attempts = $question->getMaxAttempts();
     while (null === $attempts || $attempts--) {
         if (null !== $error) {
             $output->writeln($this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error'));
         }
         try {
             return call_user_func($question->getValidator(), $interviewer());
         } catch (\Exception $error) {
         }
     }
     throw $error;
 }
Exemplo n.º 4
0
 /**
  * Renders a caught exception.
  *
  * @param \Exception      $e      An exception instance
  * @param OutputInterface $output An OutputInterface instance
  */
 public function renderException($e, $output)
 {
     do {
         $title = sprintf('  [%s]  ', get_class($e));
         $len = $this->stringWidth($title);
         $width = $this->getTerminalWidth() ? $this->getTerminalWidth() - 1 : PHP_INT_MAX;
         // HHVM only accepts 32 bits integer in str_split, even when PHP_INT_MAX is a 64 bit integer: https://github.com/facebook/hhvm/issues/1327
         if (defined('HHVM_VERSION') && $width > 1 << 31) {
             $width = 1 << 31;
         }
         $formatter = $output->getFormatter();
         $lines = array();
         foreach (preg_split('/\\r?\\n/', $e->getMessage()) as $line) {
             foreach ($this->splitStringByWidth($line, $width - 4) as $line) {
                 // pre-format lines to get the right string length
                 $lineLength = $this->stringWidth(preg_replace('/\\[[^m]*m/', '', $formatter->format($line))) + 4;
                 $lines[] = array($line, $lineLength);
                 $len = max($lineLength, $len);
             }
         }
         $messages = array('', '');
         $messages[] = $emptyLine = $formatter->format(sprintf('<error>%s</error>', str_repeat(' ', $len)));
         $messages[] = $formatter->format(sprintf('<error>%s%s</error>', $title, str_repeat(' ', max(0, $len - $this->stringWidth($title)))));
         foreach ($lines as $line) {
             $messages[] = $formatter->format(sprintf('<error>  %s  %s</error>', $line[0], str_repeat(' ', $len - $line[1])));
         }
         $messages[] = $emptyLine;
         $messages[] = '';
         $messages[] = '';
         $output->writeln($messages, OutputInterface::OUTPUT_RAW);
         if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
             $output->writeln('<comment>Exception trace:</comment>');
             // exception related properties
             $trace = $e->getTrace();
             array_unshift($trace, array('function' => '', 'file' => $e->getFile() != null ? $e->getFile() : 'n/a', 'line' => $e->getLine() != null ? $e->getLine() : 'n/a', 'args' => array()));
             for ($i = 0, $count = count($trace); $i < $count; $i++) {
                 $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
                 $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
                 $function = $trace[$i]['function'];
                 $file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a';
                 $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
                 $output->writeln(sprintf(' %s%s%s() at <info>%s:%s</info>', $class, $type, $function, $file, $line));
             }
             $output->writeln("");
             $output->writeln("");
         }
     } while ($e = $e->getPrevious());
     if (null !== $this->runningCommand) {
         $output->writeln(sprintf('<info>%s</info>', sprintf($this->runningCommand->getSynopsis(), $this->getName())));
         $output->writeln("");
         $output->writeln("");
     }
 }
Exemplo n.º 5
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $this->input = $input;
     $this->output = $output;
     $output->writeln('called');
 }
Exemplo n.º 6
0
 public function callableMethodCommand(InputInterface $input, OutputInterface $output)
 {
     $output->writeln('from the code...');
 }
Exemplo n.º 7
0
 protected function interact(InputInterface $input, OutputInterface $output)
 {
     $output->writeln('interact called');
 }
Exemplo n.º 8
0
 /**
  * Runs the command.
  *
  * The code to execute is either defined directly with the
  * setCode() method or by overriding the execute() method
  * in a sub-class.
  *
  * @param InputInterface  $input  An InputInterface instance
  * @param OutputInterface $output An OutputInterface instance
  *
  * @return array An array of [null, $callable, $parameters] that should be called for the command
  *
  * @throws \Exception
  *
  * @see setCode()
  * @see execute()
  *
  * @api
  */
 public function run(InputInterface $input, OutputInterface $output)
 {
     if (null !== $this->processTitle) {
         if (function_exists('cli_set_process_title')) {
             cli_set_process_title($this->processTitle);
         } elseif (function_exists('setproctitle')) {
             setproctitle($this->processTitle);
         } elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output->getVerbosity()) {
             $output->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
         }
     }
     // force the creation of the synopsis before the merge with the app definition
     $this->getSynopsis();
     // add the application arguments and options
     $this->mergeApplicationDefinition();
     // bind the input against the command specific arguments/options
     try {
         $input->bind($this->definition);
     } catch (\Exception $e) {
         if (!$this->ignoreValidationErrors) {
             throw $e;
         }
     }
     $this->initialize($input, $output);
     if ($input->isInteractive()) {
         $this->interact($input, $output);
     }
     $input->validate();
     $callable = $this->getCallable();
     $params = $this->parseInput($input, $output);
     return new ParsedCommand($callable, $params, $input, $output);
 }