Como crear comando de consola en Magento 2

How To : Como crear comando de consola en Magento 2

Antiguamente para las versiones previas de Magento se usaban scripts PHP para cada acción y era necesario pensar donde colocarlo en shell, en la raiz.

Esta es una de las grandes mejoras de Magento2 la creación de comandos de consola CLI.

Este desarrollo puede ser  más sencillo si has programando anteriormente con Symfony y has creado tus comandos.

Como bien sabemos Magento 2 usa los componentes Console, EventDispatcher y Process de Symfony.

Este ejemplo es realmente básico para poder centrarse en los componentes mínimos para crear un comando en Magento 2.

Aunque es un ejemplo para vamos a proceder a crear una estructura de directorios de módulo estándar de Magento 2

code/<Vendor>/<ModuleName>
code/<Vendor>/<ModuleName>/etc
code/<Vendor>/<ModuleName>/etc/module.xml
code/<Vendor>/<ModuleName>/etc/di.xml
code/<Vendor>/<ModuleName>/registration.php
code/<Vendor>/<ModuleName>/Console
code/<Vendor>/<ModuleName>/Console/Command/<Comando>Command.php

Crear code/<Vendor>/<ModuleName>/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
 <module name="<Vendor>_<ModuleName>" setup_version="1.0.0">
 </module>
</config>

Crear code/<Vendor>/<ModuleName>/etc/di.xml

<?xml version="1.0"?>
	<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
		<type name="Magento\Framework\Console\CommandList">
			<arguments>
				<argument name="commands" xsi:type="array">
					<item name="<comando>" xsi:type="object"><Vendor>\<ModuleName>\Console\Command\<Comando>Command</item>
				</argument>
			</arguments>
		</type>
	</config>

Crear code/<Vendor>/<ModuleName>/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
 \Magento\Framework\Component\ComponentRegistrar::MODULE,
 '<Vendor>_<ModuleName>',
 __DIR__
);

Crear code/<Vendor>/<ModuleName>/Console/Command/<Comando>Command.php

<?php 
namespace <Vendor>\<ModuleName>\Console\Command;


use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;


class <Comando>Command extends Command
{
 
    protected function configure()
    {
/*
   No es obligatorio el uso de PSR <modulename>:<comando>
*/
        $this->setName('<modulename>:<comando>')->setDescription('Descripción del comando');
    }
 
    protected function execute(InputInterface $input, OutputInterlface $output)
    {
        $output->writeln('Ejemplo');
    }
 
}

Repositorio en gitHub del código

Archivo Appspec CodeDeploy para Magento 2

Que es Appspec y para que sirve?

El archivo appspec se encarga de decirle a AWS CodeDeploy que hacer cuando recibe la orden de realizar un despliegue como por ejemplo que archivos copiar y que ha de hacer al iniciar el despliegue o al finalizar.

appspec tiene el formato yaml que ya se usa para muchos frameworks para establecer configuraciones como symfony.

Mediante appspec  AWS CodeDeploy puede ejecutar secuencias externas al script yaml, ya que ofrece unas llamadas hook:

BeforeInstall

AfterInstall

ApplicationStart

ValidateService

 

Añadir soporte AWS S3 en Magento2

No estaría nada mal que Magento2 incluyera un módulo para poder migrar todos los archivos de media a amazon web services s3. Aquí os proponemos una solución para mover todos los archivos con un módulo creado por thaiphan que se llama magento2-s3.

En tu carpeta de magento2 ejecuta este composer

sudo composer require thaiphan/magento2-s3

Si todo ha ido bien debes seguir estos pasos.

Habilitar Modulo Tahi_s3 para Magento 2

php bin/magento module:enable Thai_S3
php bin/magento setup:upgrade

Configuración Modulo Tahi_s3 para Magento 2

php bin/magento s3:config:set \
    --access-key-id=XXXXXXX \
    --secret-key=XXXXXXX \
    --bucket=XXXXXXX \
    --region=XXXXXXX

er01

Exportar imagenes y archivos a s3 para Magento 2

php bin/magento s3:storage:export

up-demo

Habilitar Almacenamiento en el backend para Magento 2

php bin/magento s3:storage:enable

act

Error al ejecutar sudo composer require thaiphan/magento2-s3
Si has actualizado al versión 2.0 >= puede salir este error
[InvalidArgumentException]
Could not find package thaiphan/magento2-s3 at any version for your minimum-stability (alpha). Check the package spelling or your minimum-stability

Usa la rama dev-master
sudo composer require thaiphan/magento2-s3 dev-master