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?