No post anterior, começamos a falar sobre Plugins e focamos no Plugin Before. Neste post, falaremos sobre Magento 2 Plugin After.
Vimos como utilizar o Plugin Before para interceptar um método e alterar o comportamento do seu argumento, conforme abaixo:
Enquanto o Plugin Before trabalha interceptando um método para alterar o comportamento do seu argumento, o Plugin After trabalha interceptando um método para alterar o comportamento do seu resultado.
Magento 2 Plugin After
Voltando o nosso módulo, efetuamos a seguinte alteração em nossa classe PluginOne:
<?php namespace ForMage\Learning\Plugin; class PluginOne { // public function beforeSetName(\Magento\Catalog\Model\Product $subject, $name) // { // return "Plugin Before | ".$name; // } public function afterGetName(\Magento\Catalog\Model\Product $subject, $result) { return $result. " | Plugin After"; } }
Comentamos o nosso Plugin Before e adicionamos no nosso método afterGetName(). Assim, nós interceptaremos o método getName()
da classe Magento\Catalog\Model\Product
. É importante o uso do prefixo after antes do nome do método. Ao executarmos o nosso controle temos o seguinte resultado, o nome do nosso produto concatenado com “| Plugin After”:
No entanto, nós podemos utilizar o Plugin Before junto com o Plugin After:
<?php namespace ForMage\Learning\Plugin; class PluginOne { public function beforeSetName(\Magento\Catalog\Model\Product $subject, $name) { return "Plugin Before | ".$name; } public function afterGetName(\Magento\Catalog\Model\Product $subject, $result) { return $result. " | Plugin After"; } }
Então, com o Plugin Before interceptamos o método setName()
e alteramos o comportamento seu argumento, adicionando a string “Plugin Before |” antes do argumento e, como o Plugin After interceptamos o método getName()
e modificamos o seu resultado, conforme visto acima.
Ao executarmos a nossa rota novamente temos:
Conclusão: a utilização de Plugin facilita bastante o nosso dia-a-dia como desenvolvedores Magento 2!
Para mais informações sobre Plugins
Dúvidas? Posta aí!
Um abraço!