compress = new Compress(); $this->registerCommands(); } public function run() { if ($this->isFirstInstall()) { if ($this->download()) { $this->install(); } } } /** * 是否是首页安装 * * @time 2020年07月26日 * @return bool */ public function isFirstInstall() { return !FileSystem::exists($this->getInstallPath() . $this->module); } /** * 搜索模块 * * @time 2020年07月26日 * @return string */ public function searchModule() { return 'http://api.catchadmin.com/hello.zip'; } /** * 下载 * * @time 2020年07月26日 * @return string */ public function download() { return $this->compress->savePath($this->getModuleZip())->download($this->searchModule()); } /** * 安装 * * @time 2020年07月26日 * @throws \Exception * @return void */ public function install() { $this->extractTo(); $this->installDatabaseTables(); $this->installTableData(); } /** * 解压 * * @time 2020年07月26日 * @throws \Exception * @return bool */ public function extractTo() { $zip = new Zip(); $zip->make($this->getModuleZip())->extractTo($this->getInstallPath())->close(); return true; } /** * 获取模块 * * @time 2020年07月26日 * @return string */ protected function getModuleZip() { return $this->downloadPath() . $this->module . '_'. date('YmdHis') . '.zip'; } /** * 安装表 * * @time 2020年07月26日 * @return void */ public function installDatabaseTables() { Console::call('catch-migrate:run', [$this->module]); } /** * 初始化表数据 * * @time 2020年07月26日 * @return void */ public function installTableData() { Console::call('catch-seed:run', [$this->module]); } /** * 注册命令 * * @time 2020年07月26日 * @return void */ protected function registerCommands() { return app()->console->addCommands([ MigrateCreateCommand::class, SeedRunCommand::class, MigrateRollbackCommand::class, ]); } /** * 下载路径 * * @time 2020年07月26日 * @return string */ protected function downloadPath() { $path = runtime_path('catch' . DIRECTORY_SEPARATOR . 'download'); if (!FileSystem::exists($path)) { FileSystem::makeDirectory($path, 0777, true); } return $path; } /** * 获取安装路径 * * @time 2020年07月26日 * @return string */ protected function getInstallPath() { if ($this->installPath) { return root_path($this->installPath); } return CatchAdmin::directory(); } /** * 设置模块 * * @time 2020年07月26日 * @param $module * @return $this */ public function setModule($module) { $this->module = $module; return $this; } /** * 设置安装目录 * * @time 2020年07月26日 * @param $path * @return $this */ public function setInstallPath($path) { $this->installPath = $path; return $this; } }