Sigue el aprendizaje/descubrimiento/experimento a través del módulo Barbanet_SampleModule.
Una de las esperadas y ultra mencionadas novedades de Magento2 ha sido la consola nativa para realizar muchas de las operaciones administrativas.
Lo que sigue a continuación es un ejemplo más que sencillo (en todo sentido) sobre cómo agregar un nuevo comando desde nuestro módulo a la consola.
Crear un nuevo comando requiere, al menos, de dos archivos:
- etc/di.xml
- Console/Clase.php
Claramente, el nombre Clase.php dependerá del módulo y/o comando que estemos agregando.
En el módulo, dado que ya existía el archivo etc/di.xml, simplemente necesito agregar la siguiente definición:
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="sampleModuleHello" xsi:type="object">Barbanet\SampleModule\Console\Hello</item>
</argument>
</arguments>
</type>
El contenido total ha quedado con:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Theme\Block\Html\Footer" type="Barbanet\SampleModule\Block\Html\Footer" />
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="sampleModuleHello" xsi:type="object">Barbanet\SampleModule\Console\Hello</item>
</argument>
</arguments>
</type>
</config>
Y ahora, según hemos definido en el nodo item con Barbanet\SampleModule\Console\Hello, creamos nuestro archivo Console/Hello.php, con el siguiente contenido.
<?php
namespace Barbanet\SampleModule\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Class Hello
* @package Barbanet\SampleModule\Console
*/
class Hello extends Command
{
protected function configure()
{
$this->setName('samplemodule:hello');
$this->setDescription('Barbanet_SampleModule Hello sample command');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln("My Sample Module message: Hello World!");
}
}
Nótese que el nombre que le he asignado a mi comando es: samplemodule:hello.
Si ejecutamos en la consola:
bin/magento list
Nuestro comando no aparecerá. Esto se debe a que tenemos que limpiar cache, y para esto, usaremos la misma consola con:
bin/magento cache:flush
Ahora si, al ejecutar:
bin/magento list
Nuestro comando aparece. Si ejecutamos:
bin/magento samplemodule:hello
Veremos el mensaje que definimos en nuestra clase:
My Sample Module message: Hello World!
Y eso es todo. Ta tenemos un primer comando definido.
Todo el ejemplo se encuentra implementado en la versión 2.9.0 del módulo.