justim / consoler
适用于控制台的类似Sinatra的应用程序构建器
dev-master
2015-03-11 17:13 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-05 04:45:34 UTC
README
适用于控制台的类似Sinatra的应用程序构建器
特性
- 无需操作
$argv
和其他相关变量 - 根据名称填充参数,方便访问
- 轻松集成到现有代码库中(见 Last thingies)
- 分组可选参数
- 选项别名
要求
PHP >= 5.4
安装
- 为了让Consoler工作,您只需要
Consoler.php
文件,下载它并进行修改 - 在 Packagist(Composer)中也可用
工作流程
首先创建一个Consoler
实例——在这个示例中,我们使用app.php
作为脚本的文件名
$app = new Consoler
然后您可以通过两种方式向其中添加命令
$app('options', $callback); // available at: php app.php $app->create('options', $callback); // available at: php app.php create
可以向这些函数添加两个参数,一个是作为字符串的选项,另一个是当命令匹配时将被调用的回调函数。选项是可选的,可以省略,第一个参数将成为回调函数。
选项的语法
-v
:需要短选项名称v
(例如:php app.php -v
)--verbose
:需要长选项名称verbose
(例如:php app.php --verbose
)filename
:参数(例如:php app.php sherlock.php
)-f=
:具有值的短选项(例如:php app.php -f sherlock
)--filename=
:具有值的长时间选项(例如:php app.php --filename sherlock
)[ .. ]
:可选选项/参数。可选标记可以出现在选项中的任何位置,只要它们不是嵌套的并且正确关闭。您可以将可选部分分组,这意味着选项/参数应该同时可用或不可用。(例如:php app.php
将匹配[-f=]
,同样也会匹配php app.php -f sherlock.mp4
)--verbose|-v
:选项可以有别名,第一个是前缀(见 Return types in callback)file:filename
:冒号前的字符串是过滤器的名称,目前只有file
和dir
可用。(例如:Filters example)
除非指定,否则选项和/或参数是必须的。
回调函数的返回类型
- 短选项给出一个整数:
php app.php -v -v
->$v === 2
(当可选且未提供时为零) - 长选项给出一个布尔值:
php app.php --verbose
->$verbose === true
(当未提供时为false
) - 具有值的选项给出一个字符串:
php app.php --filename sherlock.mp4
=>$filename === 'sherlock'
(当可选且未提供时为null
) - 使用别名时,使用前缀类型:
php app.php --verbose
->$verbose === 1
(使用-v|--verbose
)
示例
基本示例
$app = new Consoler; $app->create('filename', function($filename) { touch($filename); }); $app->run();
调用方式:php app.php create sherlock.mp4
选项示例
$app = new Consoler; $app->create('[-f|--force] filename', function($filename, $force) { if ($force || !file_exists($filename)) { touch($filename); } }); $app->run();
调用方式:php app.php create -f sherlock.mp4
过滤器示例
$app = new Consoler; $app->remove('file:filename', function($filename) { unlink($filename); }); $app->run();
调用方式:php app.php remove sherlock.mp4
(仅当文件存在时匹配)
参数示例
$app = new Consoler; $app->remove('[foo] [bar baz] filename', function($foo, $bar, $baz, $filename) { // foo = null // bar = '1' // baz = '2' // filename = 'sherlock.mp4' }); $app->run();
调用方式:php app.php remove 1 2 sherlock.mp4
(foo不匹配,bar & baz优先,因为它们是分组的)
交互式示例
$app = new Consoler; $app->remove('filename', function($filename, $confirm, $print) { if ($confirm('Are you sure?', 'y' /* default */)) { unlink($filename); $print('File removed'); } else { $print('File not removed'); } }); $app->run();
调用方式:php app.php remove sherlock.mp4
Mooooaaaarrr
查看tests/ConsolerTest.php中的测试。
辅助函数
辅助函数作为回调函数的参数提供。
$print
-> 打印到标准输出(STDOUT
)$error
-> 打印到标准错误(STDERR
)$ask
-> 从STDIN
获取数据 - 打字 :)$confirm
-> 询问y
或n
并返回一个布尔值
$password
-> 询问密码而不显示输入(在STDERR
上)$file
-> 询问一个有效的文件$exit
-> 辅助函数,用于带可选错误消息或代码退出进程(exit;
)
最后的事情
您可以通过添加__consolerInvoke
-方法,将您现有的其中一个类用作有效的回调。