DRUSH 9
CREEMOS UN
COMANDO EN
10 MINUTOS
About me:
Marcelo Tosco ( @capy )
Front-end

$log = $this->logger();Logs

$log->emergency('Emergency message');
$log->alert('Alert message');
$log->error('Error message');
$log->warning('Warning message');
$log->notice('Notice message');
$log->success('Success message');@bootstrap
@bootstrap none@bootstrap root@bootstrap full/**
* Ejemplo de un comando con bootstrap "root".
*
* @command Bootstrap:root
* @aliases bsr
* @bootstrap root
*/
public function foo() {
// Tarea pesada por aquí.
}
/**
* Ejemplo de un comando bootstrap "none".
*
* @command Bootstrap:none
* @bootstrap none
*/
public function none() {
$this->logger()->notice('Sin bootsrap.');
$this->logger()->notice('RAM: ' . $this->calcRAM());
}/**
* Ejemplo de un comando con bootstrap "root".
*
* @command Bootstrap:root
* @bootstrap root
*/
public function root() {
$this->logger()->notice('Con bootsrap root.');
$this->logger()->notice('RAM: ' . $this->calcRAM());
}
/**
* Ejemplo de un comando con bootstrap "full".
*
* @command Bootstrap:full
* @bootstrap full
*/
public function full() {
$this->logger()->notice('Con bootsrap full.');
$this->logger()->notice('RAM: ' . $this->calcRAM());
}
Alias
class SampleAliasCommands
extends DrushCommands
implements SiteAliasManagerAwareInterface {
}use SiteAliasManagerAwareTrait;class SampleAliasCommands
extends DrushCommands {
}$alias = $this->siteAliasManager()->getSelf();$alias = $this->siteAliasManager()->get('dev');$list = $this->siteAliasManager()->getMultiple(NULL);/**
* Muestra el alias usado en el comando
*
* @command SampleAlias:showAlias
* @aliases ssa
*/
public function whoIsSelf() {
$alias = $this->siteAliasManager()->getSelf();
$this->logger()->notice("name: " . $alias->name());
$this->logger()->notice("uri: " . $alias->uri());
$this->logger()->notice("root: " . $alias->root());
$this->logger()->notice("Foo: " . $alias->get('foo'));
}Params y "hooks"
/**
* Imprime el param que le pasemos.
*
* @param $algo string A param.
* @command Params:un-comando
*/
public function unComando($algo) {
$this->logger()->notice($algo);
}¿?
/**
* @hook interact Params:un-comando
*/
public function hookComando($input, $output) {
$algo = $input->getArgument('algo');
if (empty($algo)) {
$input->setArgument(
'algo',
'Valor asignado al vuelo.'
);
}
}$io = $this->io();io()
Barras de progreso
$io->progressStart(100);
$io->progressAdvance();
$io->progressFinish();
$io->title('Indexado de buscadores');
$io->section('Indices a reconstruir:');
// Listado
$io->text('Ve a buscarte un café
porque esto va a tardar.');
$io->newLine();
$io->section('Contenidos no indexados');
// Tabla.Títulos, secciones, texto y saltos de linea

$io->listing([
'Noticias',
'Artículos',
'Productos',
]);
$io->table(
['CT', 'Title', 'URI'],
[
['article', '10 formas ...', 'node/2556'],
['article', 'Haz tu pro...', 'node/84'],
['product', 'Raspberry PI', 'product/125674'],
]
);Listados y tablas

$io->note('Lorem ipsum dolor sit amet');
$io->caution('Lorem ipsum dolor sit amet');
$io->warning('Lo mismo que "success" pero en warning');
$io->success('Mensaje "success" que se suele mostrar cuando acabamos una operación exitosamente');
$io->error('Lo mismo que "warning" pero en error');Mensajes

Interacción con el usuario
[seguimos con io()]
$age = $io->ask('¿Edad?');$age = $io->ask('¿Edad?', 34);$age = $io->ask('¿Edad?', NULL, function ($input) {
if (!is_numeric($input)) {
throw new \RuntimeException('Solo números');
}
});Ask
$secret = $io->askHidden('Pon tu clave',
function ($pass) {
if (is_valid_pass($pass)) {
return $pass; // (o true)
}
$error_msg = "Contraseña incorrecta";
throw new \RuntimeException($error_msg);
});Ask hidden
$question = '¿Confirmas que has leido todo el GDPR?';
$gpdr = $io->confirm($question, FALSE);$cms_choices = ['WP', 'Joomla', 'Drupal'];
$question = '¿Cual es el CMS mas potente?';
$cms = $io->choice(
$question,
$cms_choices,
'Drupal'
);Confirm & Choice
Hora de la demo
Ok, ¿Y el comando?
¡Gracias!

¿Preguntas?