VCard oder RSS-Feed ?
Cake bietet mit seiner Router-Funktionalität die Chance ganz einfach neue Ausgabeformate zu definieren. Dem Router erklärt man erstmal mit
Router::parseExtensions('rss', 'vcf');
auf welche Extensions er reagieren soll. RSS gehört dabei in Cake zu den Standardextensions, die über den RSS-Helper selbständig erzeugt werden kann. D.h. also, wenn
http://meine.domain.de/products/index
einfach die Extension .rss an die Url angehängt wird
http://meine.domain.de/products/index.rss
dann erkennt der Router die Erweiterung RSS in der URL und holt sich den RSS-View zur Ausgabe der Daten im RSS-Format. Normale Views finden sich in APP/views/products bezogen auf das obige Beispiel. Um nun die RSS-Ausgabe zu formatieren, erzeugt man einen zusätzlichen Unterordner APP/views/products/rss und legt dort für jeden gewünschten View, der als RSS-Feed erzeugt werden soll, eine entsprechende Datei. Also beispielsweise APP/views/products/rss/index.ctp und erzeugt mit Hilfe des RSS-Helpers die gewünschte Ausgabe.
Will man also auf die gleiche Weise statt einem RSS-Feed nun eine VCard von einem Kontakt erzeugen, dann geht man entsprechend vor. Zusätzlich benötigt man aber ein Layout für VCF-Dateien das man in APP/views/layouts/vcf/default.ctp anlegen muss. Dort hinterlegt man für die VCard die notwendigen Ausgaben, um das Format über den Browser auch richtig ausliefern zu können:
Configure::write('debug', 0); // nur nötig, falls man im Debug-Mode arbeitet und trotzdem die Ausgaben testen will header( 'Content-Type: application/directory; ' . 'profile="vcard"; ' . 'charset=' . $charset ); header('Content-Length: ' . strlen($content_for_layout)); header("Content-Disposition: $disposition; filename=\"$filename\""); echo $content_for_layout;