lijinma / commander
简化 PHP 命令行界面制作
0.0.4
2015-01-08 08:46 UTC
Requires
- lijinma/php-cli-color: ~1.0
Requires (Dev)
- phpspec/phpspec: 2.1.0
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 >
以下条件下,任何获得本软件及其相关文档副本(“软件”)的人,均免费获得在此软件上不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件提供方进行此类处理,但必须遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他行为中产生的,无论该行为是否与软件或其使用或其它方式有关。