asar / silly
此包最新版本(dev-master)没有可用的许可信息。
Silly 是一个基于 PHP 的工具,用于快速创建命令行脚本。
dev-master
2012-12-20 04:21 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 13:18:01 UTC
README
此文档可在 Silly PHP CLI 网站 找到。
Silly: 这是个简单的 CLI 工具
Silly 是一个基于 PHP 的工具,用于快速创建命令行脚本。
Silly 使创建命令行脚本变得像编写 PHP 类定义一样简单。它如此简单,简直可笑!
要求
- PHP 5.3+
- PHP CLI
快速指南
安装
通过 Pear
$ pear channel-discover pear.brainchildprojects.org
$ pear install brainchild/Silly
或克隆源代码
$ git clone git://github.com/asartalo/Silly.git
编写任务
<?php // my-silly-test.php require_once 'Silly\Silly.php'; // or wherever you placed Silly // Define some tasks class MyCoolTasks implements \Silly\Tasks { private $controller; function getTaskNamespace() { return ''; } function setController(\Silly\Controller $controller) { $this->controller = $controller; } function taskSayHello() { $this->controller->out('Hello!'); } } // Get the silly little controller $controller = \Silly\Silly::getController(new MyCoolTasks); // Okay, run it! $controller->execute($argv);
运行!
$ php my-silly-test.php say-hello
Hello!
任务
脚本命令在任务列表中定义。任务列表是一个实现 Silly\Tasks
接口的 PHP 类,该接口定义了一个获取控制器对象(Silly\Controller
)的方法,以及一个设置任务列表命名空间的方法。注册任务时,在执行任何任务方法之前,控制器都会被传递。
<?php use Silly\Tasks; // A sample task list class FooTasks implements Tasks { private $controller; function getTaskNamespace() { return ''; } function setController(Silly\Controller $controller) { $this->controller = $controller; } function taskFoo() { $this->controller->out('foo'); } }
为了有效,任务列表需要定义一些任务方法。这些方法只是以 'task' 开头的公共方法。例如,要定义一个 'foo' 任务
<?php use Silly\Tasks; // A sample task list class FooTasks implements Tasks { //...snip...// function taskFoo() { $this->controller->out('foo'); } function taskFooBar() { $this->controller->out('foo-bar'); } }
在上述示例中,您可以在终端中输入 taskFoo
来调用
$ myscript.php foo
您也可以通过以下方式调用 taskFooBar
$ myscript.php foo-bar
如果您想向任务方法传递一些参数,只需将它们定义为方法参数。
<?php use Silly\Tasks; // A sample task list class FooTasks implements Tasks { //...snip...// function taskHello($name) { $this->controller->out("Hello $name!"); } }
$ myscript.php hello Guwapo
Hello Guwapo!
请注意,任务方法只能从 CLI 获取标量值。另外,没有参数验证,所以不向 hello 任务传递参数将引发一些 InvalidArgument 异常或类似错误。
您想要带标志的吗?
有时您可能希望传递一些标志来修改任务的行为。可以通过编写以 'flag' 开头的标志方法来定义标志。例如
<?php use Silly\Tasks; class FooTasks implements Tasks { private $suffix = ''; private $annoy; //...snip...// function taskFoo() { $output = "Foo{$this->suffix}"; if ($this->annoy) { for ($i=0; $i < 3; $i++) { $output .= $output; } } $this->controller->out($output); } function flagSuffix($suffix) { $this->suffix = $suffix; } function flagAnnoyMe() { $this->annoy = true; } }
$ myscript.php foo
Foo
$ myscript.php foo --suffix Bar
FooBar
$ myscript.php foo --suffix Bar --annoy-me
FooBar
FooBar
FooBar
FooBar
命名空间
当您有很多任务时,将这些任务分组到命名空间中是一个很好的管理方法。每个任务列表都可以指定一个命名空间。要设置任务列表的命名空间,必须返回命名空间,即 Tasks::getTaskNamespace()
。例如...
<?php use Silly\Tasks; class FooTasks implements Tasks { //...snip...// function getTaskNamespace() { return ''; // This is the default namespace } function taskFoo() { $this->controller->out('Foo!'); } } class BarTasks implements Tasks { //...snip...// function getTaskNamespace() { return 'bar'; } function taskFoo() { $this->controller->out('Bar!'); } } $controller = \Silly\Silly::getController(new FooTasks); // this registers FooTasks $contorller->register(new BarTasks) // Okay, run it! $controller->execute($argv);
$ myscript.php foo
Foo!
$ myscript.php bar:foo
Bar!
路线图
- 参数验证
- 添加快捷标志如 -f -s
- 通过文档注释添加文档