albet/scli
为您的 PHP 项目提供的简单 CLI 框架
1.0.1
2023-01-05 09:13 UTC
Requires
- php: ^8.0
- nunomaduro/termwind: ^1.15
- php-di/php-di: ^6.4
- symfony/console: ^6.2
- vlucas/phpdotenv: ^5.4
Requires (Dev)
- nunomaduro/collision: ^6.3
- phpunit/phpunit: ^9.5
- psy/psysh: @stable
- symfony/var-dumper: ^6.2
README
基于 ASMVC CLI 接口和 Symfony Console 的精简 CLI 框架,只需要最少的文件即可解析和运行 CLI。允许您在尽可能保持框架精简的同时,流畅地创建命令。
安装
安装此 SCliPHP 相对简单。
您只需运行:`composer create-project albet/scli' 即可设置完成!
使用方法
只需运行 php scli setup
并按照指南操作。然后就可以使用 make:command
或 create:command
来享受乐趣了。
示例
注意:您可以在 Core/Console/Commands 文件夹中查看一些示例,其中包含捆绑的命令。
设置命令示例
<?php namespace App\Core\Console\Commands; use App\Core\Console\Command; use App\Core\Console\Contracts\PromptableValue; use App\Core\Console\FluentCommandBuilder; use App\Core\Console\FluentOptionalParamBuilder; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class Setup extends Command { protected function setup(FluentCommandBuilder $builder): FluentCommandBuilder { return $builder->setName("setup") ->setDesc("Setting up your cli project's environment in matter of seconds.") ->addOptionalParam(fn (FluentOptionalParamBuilder $opb) => $opb->setName('ignore') ->setDesc('Ignore env file checking') ->setInputTypeNone() ->setShortcut('ig')); } public function handler(InputInterface $inputInterface, OutputInterface $outputInterface): int { if (file_exists(base_path(".env")) && !$inputInterface->getOption('ignore')) { $this->error(".env File already exist. Aborting."); return Command::FAILURE; } $lookForCli = env("APP_NAME", "scli"); $wantSetup = $this->prompt("Would you like to setting up SCli PHP? "); if (!($wantSetup instanceof PromptableValue)) { return Command::FAILURE; } if ($wantSetup === PromptableValue::NO) { $this->info("Aborting..."); return Command::INVALID; } $appName = $this->ask("What is your app name?", ["scli"], "scli"); $appVer = $this->ask("What is your current app version", ["1.0-dev"], "1.0-dev"); $data = <<<data APP_NAME=$appName APP_VERSION=$appVer data; file_put_contents(base_path('.env'), $data); rename(base_path($lookForCli), base_path(strtolower(trim($appName)))); $this->success(".env Generated."); return Command::SUCCESS; } }