Andy Truong
PHP Developer
Andy Truong 9th March 2015
Twitter: thehongtt
I want a good structure to organise my CLI application
{ "require": { "symfony/console": "2.6.4" }, "autoload": { "psr-4": { "AndyTruong\\ConsoleTalk\\": "src" } } }
<?php use AndyTruong\ConsoleTalk\HelloCmd; use AndyTruong\ConsoleTalk\PlayroundCmd; use Symfony\Component\Console\Application; require_once __DIR__ . '/vendor/autoload.php'; $app = new Application('AT console talk', '0.1.0'); $app->add(new HelloCmd()); $app->add(new PlayroundCmd()); $app->run();
<?php
namespace AndyTruong\ConsoleTalk;
use Symfony\Component\Console\Command\Command;
class HelloCmd extends Command
{
public function configure()
{
$this
->setName('at:demo:hello')
->setDescription('Just say Hello to all the world!')
->addArgument('name', InputArgument::OPTIONAL)
->addOption('language',
$shortcut = null,
InputOption::VALUE_OPTIONAL,
'Language to speak.', 'en'
);
}
}
<?php
namespace AndyTruong\ConsoleTalk;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class HelloCmd extends Symfony\Component\Console\Command\Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name') ?: 'world!';
switch ($input->getOption('language')) {
case 'vi':
$output->writeln("Chào {$name}!");
break;
case 'en':
default:
$output->writeln("Hello {$name}!");
break;
}
}
}php cli at:demo:hello
!! "Andy"
!! --language=viBy Andy Truong