albet/scli

为您的 PHP 项目提供的简单 CLI 框架

1.0.1 2023-01-05 09:13 UTC

This package is auto-updated.

Last update: 2024-09-05 12:54:49 UTC


README

基于 ASMVC CLI 接口和 Symfony Console 的精简 CLI 框架,只需要最少的文件即可解析和运行 CLI。允许您在尽可能保持框架精简的同时,流畅地创建命令。

安装

安装此 SCliPHP 相对简单。

您只需运行:`composer create-project albet/scli' 即可设置完成!

使用方法

只需运行 php scli setup 并按照指南操作。然后就可以使用 make:commandcreate: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;
    }
}