Plugin-urile (interceptorii) permit modificarea comportamentului metodelor publice fără a schimba clasa originală. Există trei tipuri: before, after și around.
Bună practică: Magento recomandă evitarea plugin-urilor around — sunt costisitoare ca performanță și pot rupe funcționalitatea. Folosește before/after ori de câte ori este posibil. Around se justifică doar când trebuie să controlezi execuția metodei originale (o poți omite sau condiționa).
Un plugin around primește ca al doilea parametru un callable $proceed care rulează metoda originală. Numele metodei este around + numele metodei țintă cu prima literă mare:
namespace Vendor\Module\Plugin;
class ProductSavePlugin
{
public function aroundSave(
\Magento\Catalog\Model\Product $subject,
callable $proceed
) {
// logică înainte
$result = $proceed(); // rulează metoda originală
// logică după
return $result;
}
}
Plugin-ul se declară în etc/di.xml cu un sortOrder (valoare mai mică = executat mai devreme). Detalii în documentația oficială.