2011-01-19 10 views
8

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?

Odpowiedz

7

Biorąc pod uwagę charakter pełnego buforowania stron, nazwałbym to "działa zgodnie z przeznaczeniem". Chociaż może być trochę dziwne, że nie można strzelać, musieli wybrać linię, a ta ma dla mnie sens, zwłaszcza, że ​​kontroler nigdy nie został wysłany.

Powinieneś używać tych zdarzeń wysyłania kontrolera do wszystkiego, co wpływa na stronę (ponieważ nadal musi być generowany), ale jeśli używasz go do śledzenia i nie, nie byłoby to właściwe.

+0

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 –

+0

Jest to trywialnie testowalne, ale chciałbym zgadywać, że nie wysyła tego zdarzenia. –

+0

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. –

1

Jedynym wiarygodnym wydarzenie do nasłuchiwania i bez pełnej strony Cache jest włączonahttp_response_send_before.

Powiązane problemy