justim/consoler

适用于控制台的类似Sinatra的应用程序构建器

dev-master 2015-03-11 17:13 UTC

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:冒号前的字符串是过滤器的名称,目前只有filedir可用。(例如: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 -> 询问yn并返回一个布尔值
  • $password -> 询问密码而不显示输入(在STDERR上)
  • $file -> 询问一个有效的文件
  • $exit -> 辅助函数,用于带可选错误消息或代码退出进程(exit;

最后的事情

您可以通过添加__consolerInvoke-方法,将您现有的其中一个类用作有效的回调。