CakePHP 2.x JsonView
Posted by zimrob | Posted in CakePHP | Posted on 17-06-2012
0
CakePHP ist eine sehr gute Framework für die Entwicklung von MVC Anwendungen. Will man anstelle der mitgelieferten View Komponenten von Cake eigende Anwendungen oder Anwendungen von Drittanbieter nutzen, dann bietet sich gerade für JavaScript Bibliotheken wie z.B. ExtJS eine serverseitige Ausgabe als JSON String an.
Hierfür bietet CakePHP bereits eine Lösung an.
http://book.cakephp.org/2.0/en/views/json-and-xml-views.html
Allerdings muss hierbei für jeden Controller eine seperate View angelegt werden. Dies kann umgangen werden, in dem man folgende View Klasse nutzt.
<?php
class JsonView extends View {
var $content = null;
function __construct(&$controller, $register = true) {
if ( is_object( $controller ) && isset( $controller->viewVars['json'] ) ) {
$this->content = $controller->viewVars['json'];
}
if ( $register ) {
ClassRegistry::addObject('view', $this);
}
}
function render($action = null, $layout = null, $file = null) {
if ( $this->content === null ) {
$data = '';
} else {
$data = json_encode($this->content);
}
return $data;
}
}
Diese Klasse wird direkt im View Verzeichnis hinterlegt und kann von jedem Controller mit Hilfe von:
$this->viewClass = 'Json';
festgelegt werden.
Die Übergabe der Daten für erfolgt am Ende der Controller Funktion mit:
$json = array();
$this->set(compact("json"));
Somit wird das Anlegen von einzelnen Views für die Controller mit gleichen Inhalt erspart.
