A simple, lightweight console implementation for command-line PHP applications.
This library was conceived as an alternative to the symfony/console component.
Truth is, the symfony component may be good for rapid-application-development or for a proof-of-concept, but on the other hand doesn't seem to be the best option for most use-cases, since only a few among the plenty of available features are necessary.
So here came the need for the yannoff/console component.
Yet the idea was not to reinvent the wheel, but merely to provide a simpler, lighter (in size & resource) and more POSIX-compliant implementation for PHP command-line applications.
Via composer:
$ composer require yannoff/console
Here is a Hello World command example:
First the application script, the script that will be invoked using php bin/app.php
#!/usr/bin/env php
<?php
// bin/app.php
// Mute PHP deprecation warnings & notices
error_reporting(E_ERROR);
require __DIR__ . '/../vendor/autoload.php';
use Yannoff\Component\Console\Application;
use Acme\Demo\HelloCommand;
$application = new Application('acme', '0.0.0');
$application->addCommands([
new HelloCommand('hello'),
]);
$application->run();
Then the command file:
<?php
// src/Acme/Demo/
namespace Acme\Demo;
use Yannoff\Component\Console\Command;
use Yannoff\Component\Console\Definition\Argument;
use Yannoff\Component\Console\Definition\Option;
class HelloCommand extends Command
{
public function configure()
{
$this
->setName('hello')
->setHelp('Hello world')
->setDescription('Hello world demo application')
->addArgument(
'name',
Argument::OPTIONAL,
'Optional name to greet'
)
->addOption(
'upper',
'u',
Option::FLAG,
'Print the greetings in upper case'
)
;
}
public function execute()
{
$name = $this->getArgument('name');
$upper = $this->getOption('upper');
$message = 'Hello ' . (null === $name ? 'World' : $name);
if ($upper) {
$message = strtoupper($message);
}
$this->writeln($message);
return 0;
}
}
People willing to migrate from symfony/console may want to have a look at the migration section of the documentation.
Licensed under the MIT Licence.