lijinma/commander

简化 PHP 命令行界面制作

0.0.4 2015-01-08 08:46 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:38:53 UTC


README

PHP 命令行界面的解决方案,受到 Node.js 中的 commander 启发。

实际上 Commander 中的某些功能参考了 commander,因此特别感谢 TJ。

安装

$ composer require "lijinma/commander"

选项解析

使用 commander 定义的选项通过 option() 方法,同时也作为选项的文档。以下示例解析了来自 $argv 的参数和选项。

<?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;
}

短标志可以作为单个参数传递,例如 -abc 等同于 -a -b -c。

子命令

<?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);

每个命令都有一个动作。

##自动化的 --help

我真的很不喜欢 Symfony/Console 生成的帮助信息,它既复杂又冗重。

  Usage: test.php [options]

  Commands:

    rmdir <dir> [otherDirs...]    Remove the directory
    rm <file>                     Remove a file

  Options:

    -h, --help  Output usage information

测试 Commander

我使用 PHPSpec 进行单元测试。PHPSpec 是一个出色的测试框架。

    $ composer install
    $ phpspec run

##许可证

Commander 在 MIT 许可证下发布

The MIT License

版权所有 (c) 2014 李金马 < lijinma@126.com >

以下条件下,任何获得本软件及其相关文档副本(“软件”)的人,均免费获得在此软件上不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件提供方进行此类处理,但必须遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他行为中产生的,无论该行为是否与软件或其使用或其它方式有关。