crodas/cli

在 symfony/console 上面的简单而有趣的抽象

v0.2.1 2018-09-07 17:58 UTC

This package is auto-updated.

Last update: 2024-09-12 18:21:36 UTC


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 函数。

优点

  1. 控制台应用程序被发现
    • 不需要自动加载器
    • 无需遵循约定
  2. 可以使用一些缓存功能来避免每次都扫描大量的目录和文件。
  3. 注解 :-)
  4. 插件支持
    1. @One@Crontab 确保你的命令只运行一次