Processamento do Fluxo de Requisição
Processamento do Fluxo de Requisição no Magento 2
- Descrever como usar os modos Magento
- Demonstrar a capacidade de criar um controller frontend com diferentes tipos de resposta (HTML/JSON/redirect)
- Demonstrar como usar reescritas de URL de uma página de produto do catálogo para um URL diferente
Descrever como usar os modos Magento
Entender os prós e contras de usar o modo de desenvolvedor ou o modo de produção.
O Magento possui três modos: o default, o developer e o production. (Referência).
- Default mode:
- É um híbrido dos modos developer e production. Por isso não é o modo ideal nem para desenvolver e nem para a loja em produção.
- Ele é o modo padrão, já vem definido na instalação do Magento
- Utiliza links simbólicos
- Erros não são mostrados (eles são colocados nos arquivos de log)
- Arquivos estáticos são gerados em tempo real e symlinked na pasta
var/view_prepeocessed.
- Developer mode:
- Ideal para desenvolvimento.
- Baixa performace (bem mais lento).
- Utiliza links simbólicos. Eles podem ser atualizados com o comando
bin/magento setup:static-content:deploy -fou removidos manualmente. - Os erros são mostrados ao usuário e o log é detalhado. Observação: o log de depuração está desativado por padrão, mesmo no modo de desenvolvedor.
- Não deve ser usado em produção pois apresenta riscos de segurança.
- Production mode
- Ideal para produção.
- Melhor performace (mais rápido).
- Não usa links simbólicos.
- Erros são salvos nos arquivos de log.
- Arquivos estáticos são pré-compilados, a compilação não acontece em tempo real.
- Maintenance mode
- Redireciona os usuários para uma página de “Serviço Temporariamente Indisponível”
- Quando este modo está ativo, o arquivo
.maintenance.flagé criado na pastavar/. - É possível configurar uma lista de IPs como exceção ao modo de manutenção
Como você ativa/desativa o modo de manutenção?
Quando o modo de manutenção está ativo, o arquivo .maintenance.flag é criado dentro da pasta var/. Quando este arquivo não existe, a loja funciona normalmente. Há também o arquivo .maintenance.ip, no mesmo diretório (var/). Nele existe uma lista de IPs que são exceção ao modo de manutenção.
Comandos:
- Habilitar o modo manutenção:
bin/magento maintenance:enable [--ip=<ip address> ... --ip=<ip address>] | [ip=none] - Desabilitar:
bin/magento maintenance:disable [--ip=<ip address> ... --ip=<ip address>] | [ip=none] - Verificar o status:
bin/magento maintenance:status
Onde:
--ip=<ip address>representa um IP que será exceção ao modo de manutenção
Para salvar uma lista de IPs, você pode usar: bin/magento maintenance:allow-ips <ip address> .. <ip address> [--none]. O --none limpa a lista.
Depois de colocar o Magento no modo de manutenção, você deve parar todos os processos do consumidor da fila de mensagens. Uma maneira de encontrar esses processos é executar o comando
ps -ef | grep queue:consumer:start. E então executar o comandokill <process_id>para cada consumidor. Em um ambiente com vários nós, certifique-se de repetir esta tarefa em cada nó.
Demonstrar a capacidade de criar um controller frontend com diferentes tipos de resposta (HTML/JSON/redirect)
Como você identifica qual módulo/controller corresponde para um determinado URL?
O Magento determina a área baseado no frontname (\Magento\Framework\App\AreaList::getCodeByFrontName). Se nenhum frontname corresponder, a área do frontname padrão é carregada. Se a solicitação não for para a API, o Magento analisa o URL. Essa operação é tratada pelo \Magento\Framework\App\Router\Base::parseRequest. O caminho (o segmento após o domínio) é explodido com a barra como delimitador.
O formato de uma url é esse: sualoja.com/nome_da_rota/nome_do_controller/action.
Exemplo: sualoja.com/catalog/product/view/id/42
- Primeira parte: frontname é o primeiro parâmetro. Nesse caso é o catalog. Ele é configurado em
etc/[area]/routes.xml. - Segunda parte: é o caminho para a parte que contém o arquivo do contoller. É onde está a ação. Nesse caso, dentro do caminho
Controller/Product/. - Terceira parte: é o nome da action. Nesse caso, o Magento produra o arquivo
View.phpe roda a métodoexecute()dentro dele. - O final:
/id/42corresponde à um parâmetro. É o mesmo queid=42.
O que você faria para criar um determinado URL? O URL pode ser criado de várias formas.
- Definindo o atributo
url_keypara categorias e produtos. - Criando um URL rewrite em
Marketing > SEO & Search > URL Rewrites - Dentro de um módulo, criando o frontname no arquivo
My_Company/My_Module/etc/[area]/routes.xmle o controller emMy_Company/My_Module/Controller/MyController/ActionFile.php. Observação: todos os Controllers devem estender\Magento\Framework\App\Action\Actione ter um métodoexecute().
Demonstrar como usar reescritas de URL de uma página de produto do catálogo para um URL diferente
Como o URL amigável de um produto ou categoria é definido?
Através do atributo url_key. Se ele não for definido, ele automaticamente corresponderá ao slug do produto ou categoria.
Como você pode mudá-lo?
Editando a url_key na página de edição do produto ou categoria.
Como você determina qual página corresponde a um determinado URL amigável?
Através da reescrita de URL ou da criação de uma nova rota em um módulo personalizado.
Na tabela url_rewrite, você encontrará uma linha em que o valor request_path é o URL amigável. O valor target_path correspondente é a página interna do Magento. O módulo Magento_UrlRewrite contém um router que verifica se o URL fornecido pode ser correspondido a um request_path na tabela url_rewrite, redirecionando para o target_path se uma correspondência for encontrada.