HTTP-Cache in Shopware mittels Plugin deaktivieren

Closed Shop

Bei der Entwicklung eines Plugins war es aus technischen Gründer notwendig, den HTTP-Cache generell zu deaktivieren. Das ist an sich über das Backend oder die config_*.php möglich, stellt aber ein großes Problem dar, wenn ein Administrator das Caching im Echtbetrieb unwissentlich aktiviert.

Daher war meine Bedingung, dass der HTTP-Cache – sofern das entsprechende Plugin aktiviert ist – bei allen Requests deaktiviert wird. Das lässt sich realisieren indem man den HTTP-Header des Response-Objekts entsprechend manipuliert und die Cache-Parameter überlädt.

Achtung: Das Deaktivieren des HTTP Caches kann zu massivem Performanceverlust führen und sollte nur dann gemacht werden, wenn technisch keine andere Lösung möglich ist.

Die Methode zum Überladen hänge ich an den Enlight_Controller_Action_PostDispatch_Frontend Event. In einem Event-Subscriber (Teil des Plugins) kann das Ganze dann folgendermaßen aussehen:

/**
 * @return array
 * Define all subscribed events
 */
 public static function getSubscribedEvents()
 {
     return array(
         'Enlight_Controller_Action_PostDispatch_Frontend' => 'onFrontendPostDispatchControllerAction'
     );
}

public function onFrontendPostDispatchControllerAction(\Enlight_Event_EventArgs $args) {
     $this->disableHttpCache($args);
}

/**
 * @param \Enlight_Event_EventArgs $args
 *
 * This method disables the HTTP-Cache if the Closed-Shop is active. This is necessary, cause a closed shop with
 * HTTP Caching will not work.
 */
public function disableHttpCache(\Enlight_Event_EventArgs $args) {

    $controller = $args->get('subject');
    $controller->Response()->setHeader('Cache-Control','no-cache, no-store, must-revalidate');
    $controller->Response()->setHeader('Pragma','no-cache');
    $controller->Response()->setHeader('Expires','0');

}

2 Kommentare

In diesem Beitrag kannst Du Kommentare verfassen.


  • Versteh den sinn des Beitrags nicht. Man kann doch es einfach in der config.php aus machen 😀

    Shyim 1 Jahr ago Antworten


  • Der Sinn steht im zweiten Satz 🙂

    synonymous 1 Jahr ago Antworten


Kommentar verfassen

Folge mir auf Twitter

Hol Dir kostenlos Tipps und Tricks zu Shopware, E-Commerce und andere Open-Source Produkte.

Folge @synonymousrocks