Extending Console_CommandLine
Extending Console_CommandLine – how to customize this package to achieve specific tasks
Adding custom actions
Console_CommandLine allows you to register custom actions when you need it. Basically, you just create a action class that inherits from Console_CommandLine_Action and you call the Console_CommandLine::registerAction() method to register it.
Let's take a simple example, suppose we want to create a "range" action that would allow the user to type:
$ <yourprogram> -r 1,5
And in our Console_CommandLine_Result instance we would have:
// $result->options['range']: array('min' => 1, 'max' => 5)
Here's how we would do:
<?php
require_once 'Console/CommandLine.php';
require_once 'Console/CommandLine/Action.php';
class ActionRange extends Console_CommandLine_Action
{
public function execute($value=false, $params=array())
{
$range = explode(',', str_replace(' ', '', $value));
if (count($range) != 2) {
throw new Exception(sprintf(
'Option "%s" must be 2 integers separated by a comma',
$this->option->name
));
}
$this->setResult(array('min' => $range[0], 'max' => $range[1]));
}
}
// then we can register our action
Console_CommandLine::registerAction('Range', 'ActionRange');
// and now our action is available !
$parser = new Console_CommandLine();
$parser->addOption('range', array(
'short_name' => '-r',
'long_name' => '--range',
'action' => 'Range', // note our custom action
'description' => 'A range of two integers separated by a comma'
));
// etc...
?>
Using a custom renderer
TODO: write this section