Was ist das letzte Ereignis, das vor dem Inhalt an den Browser gesendet wird?
-
16-10-2019 - |
Frage
Ich muss ein Cookie festlegen oder aktualisieren, aber ich möchte sicherstellen, dass alle (oder so viel wie möglich) der Anfrageverarbeitung vor dem Ausführen meines Cookie -Generierungscodes erfolgen. Wenn der Benutzer sich anmeldet, möchte ich sicherstellen, dass die Anmeldeverarbeitung vor dem Ausführen meines Codes stattgefunden hat, oder wenn der Benutzer etwas zu seinem Wagen hinzufügt, möchte ich wissen, dass die gesamte Wagenverarbeitung zuerst erfolgt.
Gibt es Ereignisse, die unmittelbar vor einer Antwort an den Browser gesendet werden?
Lösung
Die letzte Veranstaltung, die in Magento 1.x entsandt wurde, bevor der Inhalt gerendert wird, ist
controller_front_send_response_after
Wenn es keine zusätzlichen Anforderungen an Beobachterdaten gibt, die Sie benötigen würden, sollte dieser perfekt für Sie sein.
Andere Tipps
Ein praktischer Trick, um Ereignisse zu finden, die während einer Seitenanforderung/-aktion abgefeuert wurden, besteht darin, App/mage.php vorübergehend zu bearbeiten und die Ereignisse an 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 dann die Protokolldatei. Ich habe diese Methode äußerst nützlich gefunden und viel Zeit gespart, um nach dieser schwer fassbaren Veranstaltung zu suchen.
Natürlich sollten Sie es sofort entfernen, da Sie nicht geänderte Kerndateien begehen möchten. Ich wickle es in die Entwicklerprüfung ein, nur für den Fall.