Alle events wegschrijven in Magento

Wanneer je in Magento een module aan het schrijven bent, kan het handig zijn om erachter te komen welke events er afgevuurd worden. Het is belangrijk om een bepaalde functionaliteit achter de juiste event te hangen, dit om te voorkomen dat de webapplicatie iets anders gaat doen dan je hebt geanticipeerd. In dit artikel leg ik je uit hoe je logging kunt aanzetten voor alle Magento events.

photo credit: GrungeTextures via photopin cc

photo credit: GrungeTextures via photopin cc

Je kunt dit op verschillende manieren doen, 1 van die manieren is om te zoeken naar de string “Mage::dispatchEvent(” in je PHP IDE. Deze zal relatief aan je Magento installatie honderden resultaten retourneren. In 1 van mijn Magento installaties gaf deze zoekopdracht zelfs 432 resultaten. Een voorbeeld van een event dispatch kun je hieronder zien:

Er zijn ook event calls waar de event naam gegenereerd wordt aan de hand van het aan elkaar plakken van variabele namen, zoals:

Je kunt niet 100% zeker van het event naam zijn wanneer deze gegenereerd worden. Aangezien Magento het ons niet toestaat om meer dan 1 event te observeren zullen we een manier moeten vinden om alle events af te vangen voor een bepaalde request.

Wanneer we een blik werpen in de statische functie: Mage::dispatchEvent, zie je het onderstaande:

Aangezien het erg “bad practice” is om Magento core bestanden te overschrijven zullen we de functionaliteit voor het afvangen van Magento events moeten afvangen. De Mage::dispatchEvent methode roept deze methode aan via Mage_Core_Model_App. Dit is ook weer een class die we niet kunnen (en willen) overschrijven, aangezien de Magento app direct ge├»nstantieerd is van deze class.

De enige manier om alle event namen af te vangen voor een bepaald request is om een regel code toe te voegen in de Mage::dispatchEvent methode, zie onderstaande regel:

Bovenstaande code slaat de namen van elk event op in een bestand “events.log”. Voeg deze regel toe binne de methode dispatchEvent van het bestand: app/Mage.php. Je code zal er ongeveer zo uit komen te zien:

Vernieuw een willekeurige pagina op je Magento webwinkel en werp een blik in het “events.log” bestand. Je zult merken dat hier alle event namen opgeslagen zijn. Een handige tool waar ik vaak gebruik van maak tijdens het programmeren is “tail”. Hiermee kun je gemakkelijk en real-time de nieuwste toevoegingen van een bestand in de gaten houden.

Open een terminal, navigeer naar de root van je Magento installatie en voer het onderstaande commando uit ( de -f flag staat voor -follow ):

Dit programmaatje toont nu de (nieuwe) output van het events.log bestand. Let op: angezien deze toevoeging heel erg veel I/O operaties toepast naar het bestand “events.log” is het aangeraden om deze wijziging weer te verwijderen, wanneer je klaar bent met development.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *