[ 'rules' => ['think', 'app/admin'], 'ignore' => [], ], 'static' => [ 'rules' => ['public/static'], 'ignore' => ['public/static/self'], ], ]; protected function configure() { $this->setName('xtask:install'); $this->setDescription("[安装]在线安装或更新指定模块文件"); $this->addArgument('name', Argument::OPTIONAL, '模块名称', ''); } /** * @param Input $input * @param Output $output */ protected function execute(Input $input, Output $output) { $this->name = trim($input->getArgument('name')); if (empty($this->name)) { $this->output->error('在线安装的模块名称不能为空!'); } else { $this->service = InstallService::instance($this->app); if (isset($this->bind[$this->name])) { $this->rules = empty($this->bind[$this->name]['rules']) ? [] : $this->bind[$this->name]['rules']; $this->ignore = empty($this->bind[$this->name]['ignore']) ? [] : $this->bind[$this->name]['ignore']; $this->installFile(); $this->installDatabase(); } else { $this->output->error("指定模块 {$this->name} 未配置安装规则!"); } } } protected function installFile() { $data = $this->service->grenerateDifference($this->rules, $this->ignore); if (empty($data)) $this->output->info('文件比对一致不需更新文件!'); else foreach ($data as $file) { list($state, $mode, $name) = $this->service->fileSynchronization($file); if ($state) { if ($mode === 'add') $this->output->info("--- 下载 {$name} 添加成功"); if ($mode === 'mod') $this->output->info("--- 下载 {$name} 更新成功"); if ($mode === 'del') $this->output->info("--- 删除 {$name} 文件成功"); } else { if ($mode === 'add') $this->output->error("--- 下载 {$name} 添加失败"); if ($mode === 'mod') $this->output->error("--- 下载 {$name} 更新失败"); if ($mode === 'del') $this->output->error("--- 删除 {$name} 文件失败"); } } } protected function installDatabase() { } }