ivoba / console-service-provider

Silex 的控制台服务提供商

3.0.1 2016-05-19 10:29 UTC

This package is auto-updated.

Last update: 2024-09-10 21:31:00 UTC


README

为 Silex 提供 Symfony\Component\Console 基础的控制台。

Build Status

致谢

此项目基于 https://github.com/KnpLabs/ConsoleServiceProvider,该项目已不再维护。

安装

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

<?php

use Ivoba\Silex\Provider\ConsoleServiceProvider;

$app->register(new ConsoleServiceProvider(), [
    '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

编写命令

您的命令应该扩展 Ivoba\Silex\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 Ivoba\Silex\Console\ConsoleEvents;
use Ivoba\Silex\Console\ConsoleEvent;

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

?>