crodas / cli
在 symfony/console 上面的简单而有趣的抽象
v0.2.1
2018-09-07 17:58 UTC
Requires
- crodas/class-info: >=0.2.3
- crodas/file-util: >=0.1
- crodas/notoj: >=1.6.0
- crodas/remember: >=0.4.2
- symfony/console: >=2.7
Requires (Dev)
- crodas/phpunit-compat: ^1.7
README
在 symfony/console 上面的简单而有趣的抽象
它是如何工作的?
主要目标是提供一个通用且可扩展的方式来注册控制台应用程序。
应用程序本身应该像这样(cli.php
)。
<?php require __DIR__ . '/vendor/autoload.php'; $cli = new crodas\cli\Cli("/tmp/some.cache.tmp"); // the vendors cli $cli->addDirectory(__DIR__ . '/vendor'); // add my APP directory $cli->addDirectory(__DIR__ . '/apps'); // run $cli->main();
然后我们可以在 apps/
目录下创建 apps/cli/foobar.php
,它应该看起来像这样
<?php namespace myApp\Cli; /** * @Cli("foobar", "some text to describe my app") * @Arg('name', OPTIONAL, 'add name') * @Option('foobar', VALUE_REQUIRED|VALUE_IS_ARRAY, 'add name') */ function foobar_main($input, $output) { $arg = $input->getArgument('name'); $opt = $input->getOption('foobar'); $output->writeLn(json_encode(compact('arg', 'opt'))); }
现在我们可以轻松地执行 php cli.php foobar
,此时会调用 foobar_main
函数。
优点
- 控制台应用程序被发现
- 不需要自动加载器
- 无需遵循约定
- 可以使用一些缓存功能来避免每次都扫描大量的目录和文件。
- 注解 :-)
- 插件支持
@One
或@Crontab
确保你的命令只运行一次