Cuándo construyes una herramienta para la línea de ordenes, posiblemente no necesites proporcionar varias órdenes. En tal caso, tener que pasar el nombre de orden cada vez es tedioso. Afortunadamente, es posible evadir esta necesidad extendiendo la application:
namespace Acme\Tool;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
class MyApplication extends Application
{
/**
* Obtiene el nombre de la orden basándose en la entrada.
*
* @param InputInterface $input The input interface
*
* @return string The command name
*/
protected function getCommandName(InputInterface $input)
{
// Esto debería regresar el nombre de tu orden.
return 'my_command';
}
/**
* Obtiene las ordenes predefinidas que siempre tendrían que estar disponibles.
*
* @return array An array of default Command instances
*/
protected function getDefaultCommands()
{
// mantiene las ordenes predefinidas del núcleo
// para que tengan el HelpCommand cuál es utilizado cuándo
// se usa la opción --help
$defaultCommands = parent::getDefaultCommands();
$defaultCommands[] = new MyCommand();
return $defaultCommands;
}
/**
* Lo sustituye para que la aplicación no espere el nombre
* de la orden como el primer argumento.
*/
public function getDefinition()
{
$inputDefinition = parent::getDefinition();
// limpia el primer argumento de la salida normal, que es el nombre de la orden
$inputDefinition->setArguments();
return $inputDefinition;
}
}
Cuándo llames a tu guión de consola, entonces siempre se utilizará la orden MyCommand, sin tener que pasar su nombre.
También puedes simplificar cómo ejecutas la aplicación:
#!/usr/bin/env php
<?php
// command.php
use Acme\Tool\MyApplication;
$application = new MyApplication();
$application->run();