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?

DRUSH 9 CREEMOS UN COMANDO EN 10 MINUTOS

By Marcelo Tosco

DRUSH 9 CREEMOS UN COMANDO EN 10 MINUTOS

Drush 9 tiene una nueva forma de crear comandos y con unas funcionalidades bastante útiles como hook events, io() system. Vamos a crear un par de comandos rapidos y útiles que aprovechen estas nuevas capacidades.

  • 814