Files
ulthon_admin/extend/base/common/provider/ConsoleBase.php

83 lines
2.7 KiB
PHP

<?php
namespace base\common\provider;
use app\common\console\Input;
use app\common\console\Output;
use think\Console as ThinkConsole;
use think\console\input\Argument as InputArgument;
use think\console\input\Definition as InputDefinition;
use think\console\input\Option as InputOption;
class ConsoleBase extends ThinkConsole
{
public function call(string $command, array $parameters = [], string $driver = 'buffer')
{
array_unshift($parameters, $command);
$input = new Input($parameters);
$output = new Output($driver);
$this->setCatchExceptions(false);
$this->find($command)->run($input, $output);
return $output;
}
public function run()
{
$input = new Input();
$output = new Output();
$this->configureIO($input, $output);
try {
$exitCode = $this->doRun($input, $output);
} catch (\Exception $e) {
if (!$this->catchExceptions) {
throw $e;
}
$output->renderException($e);
$exitCode = $e->getCode();
if (is_numeric($exitCode)) {
$exitCode = (int) $exitCode;
if (0 === $exitCode) {
$exitCode = 1;
}
} else {
$exitCode = 1;
}
}
if ($this->autoExit) {
if ($exitCode > 255) {
$exitCode = 255;
}
exit($exitCode);
}
return $exitCode;
}
protected function getDefaultInputDefinition(): InputDefinition
{
$definition = new InputDefinition([
new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'),
new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message'),
new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this console version'),
new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'),
new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'),
new InputOption('--ansi', '', InputOption::VALUE_NONE, 'Force ANSI output'),
new InputOption('--no-ansi', '', InputOption::VALUE_NONE, 'Disable ANSI output'),
new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'),
new InputOption('--force-force', 'ff', InputOption::VALUE_NONE, 'Skip all interactive confirmation prompts (can skip all confirmations)'),
]);
return $definition;
}
}