Olá pessoal,

hoje estou aqui para falar de um recurso muito legal no Magento 2 que podemos aproveitar em nossos módulos, adicionados comandos que podem ser executados no terminal dentro de sua instalação Magento 2.

Ao utilizar o Magento 2 você já deve estar cansado de saber que há alguns comandos no terminal para limpar o cache, reindexar os índices e por aí vai, e algumas vezes é interessante utilizarmos desse recurso de cli commands para possibilitar executar alguma tarefa. Este recurso é muito interessante especialmente em situações como por exemplo executar alguma função no Magento mas essa função não deve ficar disponível para ser executado no painel administrativo.

Um bom exemplo é uma integração de produtos, vamos supor que você desenvolveu uma integração que importe no Magento produtos vindos de um outro sistema. Você pode criar um cli command para inicializar essa sincronização já que tal ação não é recomendado de ficar disponível e “aos olhos” do usuário no painel administrativo.

Uma outra aplicação dos cli commands também é em execuções que causem error de timeout no navegador. Vamos supor que você adicionou no grid de produtos um botão para importar os produtos de um outro sistema no Magento, mas por ser um grande volume de produtos esta ação irá demorar um certo tempo e o navegador tem um tempo de resposta limite que quando atingido exibe um erro na página. Esse é um ótimo caso para aplicação de um cli command.

Então vamos ver como podemos adicionar esse recurso em nosso código =)

No seu arquivo de injeção de dependências (etc/di.xml) você deve declarar todos os cli commands que serão disponibilizados por seu módulo. Veja o exemplo:

Veja que temos o item do tipo “Magento\Framework\Console\CommandList” onde são passados os comandos. Temos que definir o nome de cada comando e qual o tipo de objeto (Classe) que será responsável por executar a ação desse comando.

Agora vamos criar a nossa classe. Veja o exemplo da classe de importar produtos:

A primeira coisa é que nossa classe deve dar um “extend” na classe Symfony\Component\Console\Command\Command.

Após isso devemos declarar o construtor da classes injetando um objeto da classe Magento\Framework\App\State. Esse objeto será responsável por setar qual a “área” do comando, podendo ser frontend or adminhtml. A função desse “area” é definir o tipo de ação que será executada a seguir, pois algumas ações estão disponíveis somente em determinadas áreas. Por exemplo se você criar um cli command para trocar o nome de um usuário do painel administrativo este comando deve ser setado no area code “adminhtml”, pois este é um tipo de ação não disponível no frontend.

Criado o construtor vamos criar o método configure, como o nome propriamente já nos diz ele é responsável por configurar esse comando que estamos adicionando. Devemos usar o $this->setName para setar o nosso comando. No meu exemplo o comando será “exemplo:exportar_produtos”, então se você acessar o root de seu Magento 2 e executá-lo a nossa classe será chamada para executar a ação. A palavra “exemplo” é como um identificador do módulo e a palavra que vem a seguir após os dois pontos é o comando que estamos declarando. Eu geralmente utilizo nesse identificador o mesmo nome do pacote do meu módulo, como meu módulo chama Exemplo eu também estou utilizando este identificador. E a palavra que define o comando eu sugiro sempre que você utilize algo que deixe bem explícito o que o comando irá fazer, como no meu caso “exportar_produtos”.

No método $this->setDescription você irá definir uma descrição que será exibida quando alguém rodar o comando “php magento –list” para verificar os comandos disponíveis no terminal.

Um outro recurso bem bacana é que você pode passar parâmetros pra esse comando. Vamos pensar nesse meu exemplo de exportar produtos, eu poderia exportar todos os produtos com o meu comando ou também poderia querer exportar apenas um. Pra isso você pode adicionar um InputArgument. Usando o $this->addArgument você pode definir o parâmetro, definindo seu nome, se ele é obrigatório ou opcional e uma descrição.

E por fim mas não menos importante temos o método execute, que é onde toda a mágica acontece.

Neste método eu seto o area code como adminhtml na primeira linha de código e depois logo em seguida vem minha lógica de programação. Por fim utilizo o $output para escrever uma mensagem para o usuário, esta mensagem será exibida no terminal.

Bom pessoal, é isso aí. De maneira rápida e prática como adicionar cli commands pro seu módulo. Espero que vocês explorem muito essa funcionalidade que ajuda e muito no dia a dia manipulando ações e outras tarefas.

Se tiverem alguma sugestão de novo assunto por favor me envie por email (igor@igorludgero.com) que são sempre bem vindas.

Grande abraço e até o próximo post!

Adicionando cli commands em seu módulo

Igor Ludgero


PHP & Magento Developer from Brazil.


Post navigation


One thought on “Adicionando cli commands em seu módulo

Leave a Reply

Your email address will not be published. Required fields are marked *

Pin It on Pinterest