Consoleコンポーネントをスタンドアロンで使ってみます

Symfony2のConsoleコンポーネントスタンドアロンで使ってみます

composer.json

{
    "autoload": {
        "psr-0": {"": "src/"}
    },
    "require": {
        "symfony/console": "dev-master"
    }
}

セットアップ

$ curl -O http://getcomposer.org/composer.phar
$ php composer.phar update
$ mkdir app
$ mkdir -p src/Command
$ tree -d
.
├── app
├── src
│   └── Command
└── vendor
    ├── composer
    └── symfony
        └── console
            └── Symfony
                └── Component
                    └── Console
                        ├── Command
                        ├── Descriptor
                        ├── Event
                        ├── Formatter
                        ├── Helper
                        ├── Input
                        ├── Logger
                        ├── Output
                        ├── Question
                        ├── Resources
                        │   └── bin
                        ├── Tester
                        └── Tests

app/console ランチャー

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

require_once __DIR__ . '/../vendor/autoload.php';

use Symfony\Component\Console\Application;

$app = new Application();

foreach (glob(__DIR__ . '/../src/Command/*Command.php') as $FileName) {
    $className = "Command\\" . rtrim(basename($FileName), ".php");
    $app->addCommands(array(new $className()));
}

$app->run();

src/Command/*Command.php コマンド実装クラス

<?php

namespace Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class SampleCommand extends Command
{
    protected function configure()
    {
        $this->setName('sample');
        $this->setDescription('これはサンプルコマンドです');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("ドイツパンは美味しい!");
    }
}

実行結果

$ php app/console sample
ドイツパンは美味しい!

便利だけどパッケージがもう少しコンパクトだといいなぁ...