This project is now maintained by Crimson Labs .
Provides a Symfony\Component\Console based console for Silex.
Use Version v1.0 for Silex 1.* compatibility, Version 2.0 for Silex 2.* compatibility
Add knplabs/console-service-provider to your composer.json and register the service:
<?php
use Knp\Provider\ConsoleServiceProvider;
$app->register(new ConsoleServiceProvider(), array(
    'console.name'              => 'MyApplication',
    'console.version'           => '1.0.0',
    'console.project_directory' => __DIR__.'/..'
));
?>You can now copy the console executable in whatever place you see fit, and tweak it to your needs. You will need a way to fetch your silex application, the most common way is to return it from your bootstrap:
<?php
$app = new Silex\Application();
// your beautiful silex bootstrap
return $app;
?>For the rest of this document, we will assume you do have an app directory, so the console executable will be located at app/console.
Use the console just like any Symfony\Component based console:
$ app/console my:command
Your commands should extend Knp\Command\Command to have access to the 2 useful following commands:
- getSilexApplication, which returns the silex application
- getProjectDirectory, which returns your project's root directory (as configured earlier)
I know, it's a lot to learn, but it's worth the pain.
There are two ways of registering commands to the console application.
Open up app/console, and stuff your commands directly into the console application:
#!/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();
?>This way is intended for use by provider developers and exposes an unobstrusive way to register commands in 3 simple steps:
- Register a listener to the ConsoleEvents::INITevent
- ???
- PROFIT!
Example:
<?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());            
});
?>