Was ist das letzte Ereignis, das ausgelöst wird, bevor Inhalte an den Browser gesendet werden?

11

Ich muss ein Cookie setzen oder aktualisieren, möchte aber sicherstellen, dass die gesamte Anforderungsverarbeitung (oder so viel wie möglich) erfolgt, bevor mein Code zur Cookie-Generierung ausgeführt wird. Wenn sich der Benutzer anmeldet, möchte ich sicherstellen, dass die Anmeldeverarbeitung stattgefunden hat, bevor mein Code ausgeführt wird, oder wenn der Benutzer etwas zu seinem Warenkorb hinzufügt, möchte ich wissen, dass die gesamte Warenkorbverarbeitung zuerst durchgeführt wird.

Gibt es Ereignisse, die unmittelbar vor dem Senden einer Antwort an den Browser ausgelöst werden?

Jim OHalloran
quelle

Antworten:

11

Das letzte Ereignis, das in Magento 1.x ausgelöst wurde, bevor der Inhalt gerendert wurde, ist

controller_front_send_response_after

Wenn es keine zusätzlichen Anforderungen an Beobachterdaten gibt, die Sie benötigen würden, sollte diese perfekt für Sie sein.

Jernej Golja
quelle
3
Eigentlich sieht "controller_front_send_response_before" so aus, wie ich es brauche. Danke, dass du mich in die richtige Richtung gelenkt hast!
Jim OHalloran
8

Ein praktischer Trick, um Ereignisse zu finden, die während einer Seitenanforderung / -aktion ausgelöst wurden, besteht darin, die Datei app / Mage.php vorübergehend zu bearbeiten und die ausgelösten Ereignisse in var / log / system.log zu schreiben

 public static function dispatchEvent($name, array $data = array())
    {
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }

zu

public static function dispatchEvent($name, array $data = array())
    {
        if(mage::getIsDeveloperMode()) {
           mage::log($name);
        }
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }

und beenden Sie dann die Protokolldatei. Ich fand diese Methode äußerst nützlich und sparte viel Zeit bei der Suche nach diesem schwer fassbaren Ereignis.

Natürlich sollten Sie es sofort entfernen, da Sie geänderte Kerndateien nicht festschreiben möchten. Ich wickle es für alle Fälle in den Entwickler-Check ein.

ProxiBlue
quelle
2
Sie können den Profiler auch aktivieren. Er bietet Ihnen umfassende Informationen darüber, was beim Laden einer Seite passiert. Dort werden auch alle ausgelösten Ereignisse wiedergegeben.
Rick Kuipers