| | <?php |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | namespace think\console; |
| |
|
| | use Exception; |
| | use think\console\output\Ask; |
| | use think\console\output\Descriptor; |
| | use think\console\output\driver\Buffer; |
| | use think\console\output\driver\Console; |
| | use think\console\output\driver\Nothing; |
| | use think\console\output\Question; |
| | use think\console\output\question\Choice; |
| | use think\console\output\question\Confirmation; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | class Output |
| | { |
| | const VERBOSITY_QUIET = 0; |
| | const VERBOSITY_NORMAL = 1; |
| | const VERBOSITY_VERBOSE = 2; |
| | const VERBOSITY_VERY_VERBOSE = 3; |
| | const VERBOSITY_DEBUG = 4; |
| |
|
| | const OUTPUT_NORMAL = 0; |
| | const OUTPUT_RAW = 1; |
| | const OUTPUT_PLAIN = 2; |
| |
|
| | private $verbosity = self::VERBOSITY_NORMAL; |
| |
|
| | |
| | private $handle = null; |
| |
|
| | protected $styles = [ |
| | 'info', |
| | 'error', |
| | 'comment', |
| | 'question', |
| | 'highlight', |
| | 'warning' |
| | ]; |
| |
|
| | public function __construct($driver = 'console') |
| | { |
| | $class = '\\think\\console\\output\\driver\\' . ucwords($driver); |
| |
|
| | $this->handle = new $class($this); |
| | } |
| |
|
| | public function ask(Input $input, $question, $default = null, $validator = null) |
| | { |
| | $question = new Question($question, $default); |
| | $question->setValidator($validator); |
| |
|
| | return $this->askQuestion($input, $question); |
| | } |
| |
|
| | public function askHidden(Input $input, $question, $validator = null) |
| | { |
| | $question = new Question($question); |
| |
|
| | $question->setHidden(true); |
| | $question->setValidator($validator); |
| |
|
| | return $this->askQuestion($input, $question); |
| | } |
| |
|
| | public function confirm(Input $input, $question, $default = true) |
| | { |
| | return $this->askQuestion($input, new Confirmation($question, $default)); |
| | } |
| |
|
| | |
| | |
| | |
| | public function choice(Input $input, $question, array $choices, $default = null) |
| | { |
| | if (null !== $default) { |
| | $values = array_flip($choices); |
| | $default = $values[$default]; |
| | } |
| |
|
| | return $this->askQuestion($input, new Choice($question, $choices, $default)); |
| | } |
| |
|
| | protected function askQuestion(Input $input, Question $question) |
| | { |
| | $ask = new Ask($input, $this, $question); |
| | $answer = $ask->run(); |
| |
|
| | if ($input->isInteractive()) { |
| | $this->newLine(); |
| | } |
| |
|
| | return $answer; |
| | } |
| |
|
| | protected function block($style, $message) |
| | { |
| | $this->writeln("<{$style}>{$message}</$style>"); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | public function newLine($count = 1) |
| | { |
| | $this->write(str_repeat(PHP_EOL, $count)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | public function writeln($messages, $type = self::OUTPUT_NORMAL) |
| | { |
| | $this->write($messages, true, $type); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) |
| | { |
| | $this->handle->write($messages, $newline, $type); |
| | } |
| |
|
| | public function renderException(\Exception $e) |
| | { |
| | $this->handle->renderException($e); |
| | } |
| |
|
| | |
| | |
| | |
| | public function setVerbosity($level) |
| | { |
| | $this->verbosity = (int) $level; |
| | } |
| |
|
| | |
| | |
| | |
| | public function getVerbosity() |
| | { |
| | return $this->verbosity; |
| | } |
| |
|
| | public function isQuiet() |
| | { |
| | return self::VERBOSITY_QUIET === $this->verbosity; |
| | } |
| |
|
| | public function isVerbose() |
| | { |
| | return self::VERBOSITY_VERBOSE <= $this->verbosity; |
| | } |
| |
|
| | public function isVeryVerbose() |
| | { |
| | return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity; |
| | } |
| |
|
| | public function isDebug() |
| | { |
| | return self::VERBOSITY_DEBUG <= $this->verbosity; |
| | } |
| |
|
| | public function describe($object, array $options = []) |
| | { |
| | $descriptor = new Descriptor(); |
| | $options = array_merge([ |
| | 'raw_text' => false, |
| | ], $options); |
| |
|
| | $descriptor->describe($this, $object, $options); |
| | } |
| |
|
| | public function __call($method, $args) |
| | { |
| | if (in_array($method, $this->styles)) { |
| | array_unshift($args, $method); |
| | return call_user_func_array([$this, 'block'], $args); |
| | } |
| |
|
| | if ($this->handle && method_exists($this->handle, $method)) { |
| | return call_user_func_array([$this->handle, $method], $args); |
| | } else { |
| | throw new Exception('method not exists:' . __CLASS__ . '->' . $method); |
| | } |
| | } |
| |
|
| | } |
| |
|