Tak więc na jednym z naszych ostatnich uruchomień mieliśmy wiele wydarzeń, które obserwowaliśmy, takie jak controller_action_predispatch. Po uruchomieniu witryny zaczęliśmy zauważać, że nasi obserwatorzy nigdy nie zostali do tego powołani. Po krótkim dochodzeniu jeden z naszych programistów uznał ten blok kodu w Mage_Core_Model_App wokół linii 292Enterprise Edition Zdarzenia kontrolera nie są uruchamiane, jeśli włączona jest pełna pamięć podręczna strony
if ($this->_cache->processRequest()) {
$this->getResponse()->sendResponse();
} else {
$this->_initModules();
$this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
if ($this->_config->isLocalConfigLoaded()) {
$this->_initCurrentStore($scopeCode, $scopeType);
$this->_initRequest();
Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
}
$this->getFrontController()->dispatch();
}
Jak widać, jeśli $ this -> _ cache-> processRequest(), która jest prawdziwa, która to jest, kiedy cała strona cache jest włączona, nigdy nie dostaniesz się do wysyłki. Deweloper znalazł http_response_send_before, który otrzymuje wywołanie w obu kierunkach, ale wydaje mi się, że jest to błąd lub nigdy nie powinieneś używać tych zdarzeń wysyłki kontrolera do niczego, jeśli masz włączone pełne buforowanie stron. jakieś pomysły?
Widzę, co mówisz, oczywiście jeśli mają pamięć podręczną i mogą wyświetlać stronę, nie przechodź przez całą ścieżkę wysyłki. Używaliśmy go do parametrów w adresie URL. Wygląda na to, że użyjemy tego drugiego. Czy wiesz, czy będzie to prawdą w przypadku strony koszyka i strony finalizacji transakcji. Mam inny projekt, w którym robię coś ze sterownikiem_predispatch_checkout_cart_index i będzie ssać, aby znaleźć inny sposób. Usuwam coś z sesji –
Jest to trywialnie testowalne, ale chciałbym zgadywać, że nie wysyła tego zdarzenia. –
Tak, po prostu przetestowałem i ma sens, że nie będą pełne strony w pamięci podręcznej koszyka i nie wydaje się, że do. Doszło do mojej imprezy za każdym razem. Oczywiście nie można buforować koszyka i kasowania z powodu danych wprowadzanych dla każdego użytkownika i zmian. –