CakePHP und Probleme mit nocache-Tags

In CakePHP ist es möglich, Bereich anzugeben, welche bei einem View-Caching der Seite nicht mit „gechached“ werden sollen. Dies geht sehr komfortabel mit den Kommentar-Tags <!--nocache--> und <!--/nocache-->. Damit wird beliebiger PHP-Code zwischen dieses beiden Tags auch bei einer Cache-Seite weiterhin ausgeführt und die Ausgaben nicht in statischen Text umgewandelt.

Bei einem Projekt kam es allerdings vor, dass sich die Inhalte mehrerer nocache-Tags nicht ganz nachvollziehbar vermischten und so an einer anderer Cache-Stelle wieder auftauchten. Nach längerem Suchen hier der Grund:

In der Dokumentation von CakePHP gibt es bei der Beschreibung des CacheHelper’s einen kleinen, aber feinen Hinweis:

Kurz gesagt: nocache-Tags können nicht in Elementen verwendet werden!
Das war auch der Grund, warum die Inhalte der verschiedenen nocache-Tags vertauscht wurden oder gar nicht auftauchten.

Lösung

Die Lösung ist simpel: einfach alle nocache-Tags aus den Elementen entfernen! Um aber dennoch Teile der Webseite nicht im Cache zu speichern, kann man weiter vorn ansetzen und gleich den Aufruf eines Elements in nocache-Tags packen.

Beispiel

Anstatt also einen nocache-Bereich innerhalb eines Elements festzulegen, sollte man das gesamte Element direkt beim Aufruf in nocache-Tags einschließen:

// app/View/Elements/loginform.ctp
<?php echo AuthComponent::user() ? 'Angemeldet.' : 'Nicht angemeldet.'; ?>
// app/View/Layouts/default.ctp
&lt;!--nocache--&gt;
&lt;?php echo $this->element('loginform'); ?&gt;
&lt;!--/nocache--&gt;

Update:

Ab Version 2.1 von CakePHP funktionieren NoCache-Tags auch in Elementen, d.h. die beschriebene Lösung sollte dann nicht mehr notwendig sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.