Какое последнее событие было отправлено перед отправкой содержимого в браузер?
Мне нужно установить или обновить файл cookie, но я хочу убедиться, что вся (или как можно больше) обработка запроса происходит до запуска моего кода генерации файлов cookie. т.Е. Если пользователь входит в систему, я хочу убедиться, что обработка входа в систему произошла до запуска моего кода, или если пользователь добавляет что-то в свою корзину, я хочу знать, что сначала выполняется вся обработка корзины.
Существуют ли какие-либо события, которые отправляются непосредственно перед отправкой ответа на браузер?
2 answers
Последним событием, отправленным в Magento 1.x перед отображением содержимого, является
controller_front_send_response_after
Если в данных наблюдателя нет дополнительных требований, которые вам понадобятся, это должно быть идеально для вас.
Удобный трюк для поиска событий, запущенных во время запроса/действия страницы, заключается в временном редактировании app/Mage.php и запишите события, запущенные в var/log/system.log
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;
}
До
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;
}
, а затем завершите файл журнала. Я нашел этот метод чрезвычайно полезным и сэкономил много времени на поиске этого неуловимого события для использования.
Естественно, вам следует немедленно удалить его, так как вы не хотите фиксировать измененные файлы ядра. Я заворачиваю это в чек разработчика, просто в дело.