ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## **Command** ### **属性** | 属性名 | 描述 |参数类型|默认值|权限| | --- | --- | --- | --- | --- | | $input | | Input | void | protected | | $output | | Output | void | protected | ### **方法** | 方法名 | 描述 |参数说明|返回值|权限| | --- | --- | --- | --- | --- | | __construct($name = null) | 构造方法 | string\|null $name 命令名称,如果没有设置则比如在 configure() 里设置 |void| public | | ignoreValidationErrors() | 忽略验证错误 |void| void | public | | setConsole(Console $console = null) | 设置控制台 |Console| void | public | | getConsole() | 获取控制台 | void | Console |public| | isEnabled() | 是否有效 | void |直接返回true| public | | **configure**() | 配置指令,留给子类进行自定义命令参数配置 | void | void | protected | | **execute**(Input $input, Output $output) | 执行指令,留给子类进行自定义命令执行程序的接口 | Input,Output | null\|int | protected | | run(Input $input, Output $output) | 执行 | Input,Output | int | public | | setCode(callable $code) | 设置执行代码 | callable(InputInterface $input, OutputInterface $output) | Command | public | | mergeConsoleDefinition($mergeArgs = true) | 合并参数定义 | 合并的参数 | void | public | | setDefinition($definition) | 设置参数定义 | array\|Definition $definition | Command |public | | getDefinition() | 获取参数定义 | void | Definition | public | | getNativeDefinition() | 获取当前指令的参数定义 | void | Definition | public | | **addArgument**($name, $mode = null, $description = '', $default = null) | 添加参数 | string $name 名称<br>int $mode 类型<br>string $description 描述<br>mixed $default 默认值 | Command | public | | **addOption**($name, $shortcut = null, $mode = null, $description = '', $default = null) | 添加选项 添加后 使用时跟在参数后面,前面加-- | string $name 选项名称<br>string $shortcut 别名<br>int $mode 类型<br>string $description 描述<br>mixed $default 默认值 | Command | public | | **setName**($name) | 设置指令名称 | string $name | Command | public | | getName() | 获取指令名称 | void | String 指令名称 |public | | **setDescription**($description) | 设置描述 | string $description | Command |public | | getDescription() | 获取描述 | void | string 描述 |public | | setHelp($help) | 设置帮助信息 | string $help | Command |public | | getHelp() | 获取帮助信息 | void | string 设置的帮助信息 |public | | getProcessedHelp() | 获取描述信息 | void | string 描述信息 |public | | setAliases($aliases) | 设置别名 | string[] $aliases | Command |public | | getAliases() | 获取别名 | void | array |public | | getSynopsis($short = false) | 获取简介 | bool $short 是否简单的 | string 简介 |public | | addUsage($usage) | 添加用法介绍 | string $usage | Command |public | | getUsages() | 获取用法介绍 | void | array |public | ### **示例:** ~~~php <?php namespace app\common\command; use think\Console; use think\console\{Command,Output,Input}; use think\console\Input\{Argument,Option}; /* * 带参数脚本兼容linux定时和手动执行 */ class Test extends Command { //定义任务名和描述 protected function configure(){ //设置参数 $this->addArgument('id',Argument::REQUIRED,'ID必填'); //必传参数 $this->addArgument('name', Argument::OPTIONAL,'NAME选填');//可选参数 //选项定义 $this->addOption('type', 't', Option::VALUE_REQUIRED,'TYPE必填',0); //选项值必填 $this->addOption('status', 's', Option::VALUE_OPTIONAL,'STATUS选填',1); //选项值选填 $this->setName('test')->setDescription("php think test 测试"); //选项定义 } //调用该类时,会自动运行execute方法 protected function execute(Input $input, Output $output){ set_time_limit(0); @ob_end_clean(); @ob_implicit_flush(1); ini_set('memory_limit','100M'); # echo substr_replace('18858281234','****',3,4); header("Content-type: text/html; charset=utf-8"); date_default_timezone_set('Asia/Shanghai'); $excel_id = Cache::get('excel_id'); if(!empty($excel_id)){ //如果缓存有值,用定时脚本执行 $id = $excel_id; }else{//如果使用命令行手动传参执行 $args = $input->getArguments();//获取传参数组 print_r($args); $options = $input->getOptions(); //获取选项数组 print_r($options); $output->writeln("参数接收为:".$args['id'].'--'.$args['name']); //接收用全称name,不能简写shortcut $output->writeln("选项接收为:".$options['type'].'--'.$options['status']); } $page = 0; while(true){ $page++; $res = $model->where(['id'=>$id])->paginate(100, false, [ 'page' => $page, 'query' => $query ]); //获取订单数据 $res = json_decode($res,true); if( empty($res['data']['body'])){//分页获取数据为空,则说明执行完毕 exit("已同步完成\n\r");//退出 } //数据不为空,循环遍历插入本地数据库 foreach($res['data']['body'] as $k=>$v){ $data['product_id'] = $v['product_id']; $data['order_status'] = $status; Db::table(Config('database.prefix').'table')->insert($data); } echo "同步第{$page}页完成\n\r"; //输出 } } } ~~~ ### **调用:** #### 控制台调用 ~~~dart # 四种调用结果相同 [root@root root]# php think test 1 admin --type "2" --status "3" [root@root root]# php think test --type "2" --status "3" 1 admin [root@root root]# php think test 1 admin -t"2" -s"3" [root@root root]# php think test -t"2" -s"3" 1 admin Array ( [command] => test [id] => 1 [name] => admin ) Array ( [type] => 2 [status] => 3 [help] => [version] => [quiet] => [verbose] => [ansi] => [no-ansi] => [no-interaction] => ) 参数接收为:1--admin 选项接收为:2--3 [root@root root]# ~~~ #### 代码调用 ~~~php namespace app\index\controller; use think\Console;//引入Console class Index{ $output = Console::call('command');#无参数调用 $output = Console::call('command',[args1,args2,argsN...]);#带参数调用命令 $output = Console::call('test',['1','admin','-t2','-s3']);#带参数调用(options和arguments不区分顺序) return $output->fetch(); #获取输出信息 } ~~~ ## **Console** ### **方法** | 属性名 | 描述 |参数说明|返回值|权限| | --- | --- | --- | --- | --- | | __construct($name = 'UNKNOWN', $version = 'UNKNOWN', $user = null) | | | | | | setUser($user) | 设置执行用户 | $user | void | public | | init($run = true) | 初始化 Console | bool $run 是否运行 Console | int|Console |public、static| | call($command, array $parameters = [], $driver = 'buffer') | 调用命令 | string $command<br>array $parameters<br>string $driver | Output |public、static| | run() | 执行当前的指令 | void | int |public| | doRun(Input $input, Output $output) | 执行指令 | Input $input 输入<br>Output $output 输出 | int |public| | setDefinition(InputDefinition $definition) | 设置输入参数定义 | InputDefinition $definition 输入定义 | Console |public| | getDefinition() | 获取输入参数定义 | void | InputDefinition |public| | getHelp() | 获取帮助信息 | void | string |public| | setCatchExceptions($boolean) | 设置是否捕获异常 | bool $boolean 是否捕获 |Console|public| | setAutoExit($boolean) | 设置是否自动退出 | bool $boolean 是否自动退出 | Console |public| | getName() | 获取名称 | void | string |public| | setName($name) | 设置名称 | string $name 名称 |Console|public| | getVersion() | 获取版本 | void | string |public| | setVersion($version) | 设置版本 | string $version 版本信息 |Console |public| | getLongVersion() | 获取完整的版本号 | void | string |public| | register($name) | 注册一个指令 | string $name 指令名称 | Command |public| | addCommands(array $commands) | 批量添加指令 | Command[] $commands 指令实例 |Console|public| | add(Command $command) | 添加一个指令 | Command $command 命令实例 | Command\|bool |public| | get($name) | 获取指令 | string $name 指令名称 | Command |public| | has($name) | 某个指令是否存在 | string $name 指令名称 | bool |public| | getNamespaces() | 获取所有的命名空间 | void | array |public| | findNamespace($namespace) | 查找注册命名空间中的名称或缩写 | string $namespace | string |public| | find($name) | 查找指令 | string $name 名称或者别名 | Command |public| | all($namespace = null) | 获取所有的指令 | string $namespace 命名空间 | Command[] |public| | getAbbreviations($names) | 获取可能的指令名 | array $names 指令名 | array |public| | configureIO(Input $input, Output $output) | 配置基于用户的参数和选项的输入和输出实例 | Input $input 输入实例<br>Output $output 输出实例 | void |public,protected| | doRunCommand(Command $command, Input $input, Output $output) | 执行指令 | Command $command 指令实例<br>Input $input 输入实例<br>Output $output 输出实例| int |public,protected| | getCommandName(Input $input) | 获取指令的名称 | Input $input 输入实例 | string |public,protected| | etDefaultInputDefinition() | 获取默认输入定义 | void | InputDefinition |public,protected| | getDefaultCommands() | 获取默认命令 | void | Command[] |public,protected| | addDefaultCommands(array $classes) | 添加默认指令 | array $classes 指令 | void |public,static| | extractNamespace($name, $limit = null) | 返回指令的命名空间部分 | string $name 指令名称<br>string $limit 部分的命名空间的最大数量 | string |public| | setDefaultCommand($commandName) | 设置默认的指令 | string $commandName 指令名称 | Console |public| ## **Output** ### **常量** | 常量名 | 描述 |参数类型|默认值| | --- | --- | --- | --- | | VERBOSITY_QUIET | | | 0 | | VERBOSITY_NORMAL | | | 1 | | VERBOSITY_VERBOSE | | | 2 | | VERBOSITY_VERY_VERBOSE | | | 3 | | VERBOSITY_DEBUG | | | 4 | | OUTPUT_NORMAL | | | 0 | | OUTPUT_RAW | | | 1 | | OUTPUT_PLAIN | | | 2 | ### **方法** 实例化时传入的think\console\output\driver\里的类(默认Console) 存入handle属性,这里的方法差不多都是操作传入的类的方法 | 属性名 | 描述 |参数说明|返回值|权限| | --- | --- | --- | --- | --- | | __construct($driver = 'console') | | | |public| | ask(Input $input, $question, $default = null, $validator = null) | | | |public| | askHidden(Input $input, $question, $validator = null) | | | |public| | confirm(Input $input, $question, $default = true) | | | |public| | choice(Input $input, $question, array $choices, $default = null) | 窗口输出时需要接受手动输入值,如:$res=$output->choice($input,"请选择正确答案",[1,2,3,4]); if($res==2){$output->write("恭喜你,回答正确!!!");}<br>![](https://img.kancloud.cn/a4/49/a449bd1fa458d2a221a203c1c7c7c3e7_301x228.png) | | |public| | askQuestion(Input $input, Question $question) | | | |public,protected| | block($style, $message) | 调用的是进一步封装的newLine方法 | | |public,protected| | newLine($count = 1) | 输出空行,调用的是进一步封装的write方法 | int $count | |public| | writeln($messages, $type = self::OUTPUT_NORMAL) | 输出信息并换行,调用的是进一步封装的write方法 | string $messages<br>int $type | |public| | write($messages, $newline = false, $type = self::OUTPUT_NORMAL) | 输出信息 | string $messages<br>bool $newline<br>int $type | |public| | renderException(\Exception $e) | | | |public| | setVerbosity($level) | | | |public| | getVerbosity() | | | |public| | isQuiet() | | | |public| | isVerbose() | | | |public| | isVeryVerbose() | | | |public| | isDebug() | | | |public| | describe($object, array $options = []) | | | |public| | __call($method, $args) | | | |public|