kron0s/console-service-provider

Silex 的控制台服务提供者

v1.0 2013-06-13 12:43 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:05:16 UTC


README

为 Silex 提供一个基于 Symfony\Component\Console 的控制台。

安装

knplabs/console-service-provider 添加到您的 composer.json 中,并注册服务

<?php

use Knp\Provider\ConsoleServiceProvider;

$app->register(new ConsoleServiceProvider(), array(
    'console.name'              => 'MyApplication',
    'console.version'           => '1.0.0',
    'console.project_directory' => __DIR__.'/..'
));

?>

现在您可以将 console 可执行文件复制到您认为合适的位置,并根据您的需求进行调整。您需要一个方法来获取您的 Silex 应用程序,最常见的方法是从您的引导程序中返回它

<?php

$app = new Silex\Application();

// your beautiful silex bootstrap

return $app;

?>

在本文档的其余部分中,我们将假设您确实有一个 app 目录,因此 console 可执行文件将位于 app/console

使用方法

像使用任何基于 Symfony\Component 的控制台一样使用控制台

$ app/console my:command

编写命令

您的命令应该扩展 Knp\Command\Command 以访问以下两个有用的命令

  • getSilexApplication,它返回 Silex 应用程序
  • getProjectDirectory,它返回您的项目根目录(如之前配置的)

我知道,这需要学习很多东西,但这是值得的。

注册命令

有两种方法可以将命令注册到控制台应用程序中。

直接从 console 可执行文件访问控制台应用程序

打开 app/console,直接将您的命令放入控制台应用程序

#!/usr/bin/env php
<?php

set_time_limit(0);

$app = require_once __DIR__.'/bootstrap.php';

use My\Command\MyCommand;

$application = $app['console'];
$application->add(new MyCommand());
$application->run();

?>

使用事件调度器

这种方法旨在由提供者开发者使用,并提供了注册命令的简单三步方法

  1. 注册对 ConsoleEvents::INIT 事件的监听器
  2. ???
  3. 成功!

示例

<?php

use My\Command\MyCommand;
use Knp\Console\ConsoleEvents;
use Knp\Console\ConsoleEvent;

$app['dispatcher']->addListener(ConsoleEvents::INIT, function(ConsoleEvent $event) {
    $app = $event->getApplication();
    $app->add(new MyCommand());            
});

?>