fbpx

Implementar JSON en CAkePhp

February 27, 2009

Si bien hay hay bastante info al respecto dando vueltas, me costó dar con una solución que hiciera lo que quería y que funcionara.

Qué es lo que quería?
Que todos los metodos llamados con el .json (ej /posts/lista.json) pasen por una sola vista, ya que en definitiva la vista siempre hace un $javascript->object($this->var) y me parecia demasiado tener que para cada controller crear una carpeta “json” adentro, y adentro de la misma un archivo nombremetodo.ctp y todos hacian lo mismo en definitiva.

Entonces la solución fue:
1. En el app/config/routes.php agregar
Router::parseExtensions(‘json’);
para que cakephp entienda la extension .json

2. Crear un layout en views/layout/json/default.ctp que contenga:
header(“Pragma: no-cache”);
header(“Cache-Control: no-store, no-cache, max-age=0, must-revalidate”);
header(‘Content-Type: text/x-json’);
header(“X-JSON: “.$content_for_layout);

echo $content_for_layout;

3. Crear una vista para todas los request con .json en views/common/json.ctp
que contenga:

< ?php
echo $javascript->object($this->viewVars);
?>

4. En el app_controller.php

– agregar el component
var $components = array(‘RequestHandler’);

– en el function beforeFilter(){
if ($this->params[‘url’][‘ext’]==’json’){
Configure::write(“debug”,0);
$this->autoRender=false;
}
}

– en el function afterFilter(){
if ($this->params[‘url’][‘ext’]==’json’){
$_view = ROOT . DS . APP_DIR . DS . “views” . DS . “common” . DS . “json.ctp”;
$this->render(null, “default”, $_view);
}
}

Este punto es el que me costo hacer andar, ya uqe los ejemplos que veia metian todo en el afterFilter, y no me funcionaba.

De esta manera, todo lo que en el metodo del controller seteemos con $this->set() lo agarra la vista creada (common/json.ctp) y lo pasa a json; y no hace falta crear una vista por cada metodo.

Nota: si usamos la function beforeFilter() o afterFilter() en nuestros controladores, acordarse siempre de llamar a parent::beforeFilter(); o parent::afterFilter(); respectivamente, para que no se pisen.

avatar
Gonzalo Escribano

Ver entradas

Most Recent

June 9, 2022

¿Qué son las DAO y cuáles son sus beneficios?

Es común en la historia contemporánea que haya cambios a partir de los avances en el campo de la...

Read More

June 2, 2022

¿Qué son las DeFi y por qué son el futuro de las finanzas?

Es común en la historia contemporánea que haya cambios a partir de los avances en el campo de la...

Read More

May 27, 2022

How to start a successful product build from scratch?

Creating a product from scratch could be a huge challenge. To achieve your business goals it’s important to develop...

Read More