参考 Node.js 的 Commander, 写了一个 PHP 版本的 Commander( Command Line Framework),不喜欢 symfony/console

分享 lijinma ⋅ 于 3年前 ⋅ 最后回复由 lijinma 1年前 ⋅ 2475 阅读

当初使用 TJ 的 Commander 非常顺手,现在在写 PHP Command Line Tool 的时候,只找到了 symfony/console,不喜欢 symfony/console 的 Help,不喜欢他的函数的调用方式,所以造了一个 Commander。

查看:https://github.com/lijinma/commander

还有一些功能细节功能没实现,但是已经可以用了,请大家轻喷。

实例一:


<?php

use Lijinma\Commander;

require __DIR__ . '/vendor/autoload.php';

$cmd = new Commander();

$cmd
    ->version('0.0.1')
    ->option('-p, --peppers', 'Add peppers')
    ->option('-P, --pineapple', 'Add pineapple')
    ->option('-b, --bbq', 'Add bbq sauce')
    ->option('-c, --cheese [type]', 'Add the specified type of cheese')
    ->parse($argv);

echo 'you ordered a pizza with:' . PHP_EOL;
if (isset($cmd->peppers)) {
    echo '  - peppers' . PHP_EOL;
}
if (isset($cmd->pineapple)) {
    echo '  - pineapple' . PHP_EOL;
}
if (isset($cmd->bbq)) {
    echo '  - bbq' . PHP_EOL;
}

if (isset($cmd->cheese)) {
    echo "  - $cmd->cheese cheese" . PHP_EOL;
}

实例二

<?php

use Lijinma\Commander;

require __DIR__ . '/vendor/autoload.php';

$cmd = new Commander();

$cmd
    ->version('0.0.1')
    ->command('rmdir <dir> [otherDirs...]', 'Remove the directory')
    ->action(
        function ($dir, $otherDirs) {
            echo 'You will remove the following directory: ' . $dir . PHP_EOL;
            if ($otherDirs) {
                echo 'And other directories: ' . implode(', ', $otherDirs) . PHP_EOL;
            }
        }
    );

$cmd->command('rm <file>', 'Remove a file')
    ->action(
        function ($file) {
            echo 'You will remove the following file: ' . $file . PHP_EOL;
        }
    );

$cmd->parse($argv);

写文字大部分时候是因为我希望能帮助到你,小部分时候是想做总结或做记录。我的微信是 lijinma,希望和你交朋友。

以下是我的公众账号,会分享我的学习和成长。
file

本帖已被设为精华帖!
回复数量: 4
  • Summer MOD A Life-long learner.
    3年前

    咋一看还以为是说这种东西 Commander , Laravel 5 为了避免混淆都把 command 改为 console 了.

  • lijinma 就喜欢折腾。
    3年前

    @Summer - . - 恩,尴尬了。。

  • baocaixiong
    1年前

    感谢,@lijinma ,已经使用你的代码改造了一些我司的项目,不过现在只是复制,还没有任何功能增加,以后有更新就来做贡献

  • lijinma 就喜欢折腾。
    1年前

    @baocaixiong 哈哈哈 希望你可以贡献啊。。

    我这个项目写的不好。。。哎

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter