ConsoleServiceProvider
Provides a Symfony\Component\Console
based console for Silex., (*1)
, (*2)
Credits
This project is based on https://github.com/KnpLabs/ConsoleServiceProvider which is unmaintained., (*3)
Install
Add ivoba/console-service-provider
to your composer.json
and register the service:, (*4)
register(new ConsoleServiceProvider(), [
'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:, (*5)
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
., (*6)
Usage
Use the console just like any Symfony\Component
based console:, (*7)
$ app/console my:command
Write commands
Your commands should extend Ivoba\Silex\Command\Command
to have access to the 2 useful following commands:, (*8)
-
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., (*9)
Register commands
There are two ways of registering commands to the console application., (*10)
Directly access the console application from the console
executable
Open up app/console
, and stuff your commands directly into the console application:, (*11)
#!/usr/bin/env php
add(new MyCommand());
$application->run();
?>
Use the Event Dispatcher
This way is intended for use by provider developers and exposes an unobstrusive way to register commands in 3 simple steps:, (*12)
- Register a listener to the
ConsoleEvents::INIT
event
- ???
- PROFIT!
Example:, (*13)
addListener(ConsoleEvents::INIT, function(ConsoleEvent $event) {
$app = $event->getApplication();
$app->add(new MyCommand());
});
?>