March 17th, 2008

Respuestas automáticas en formato JSON para CakePHP

En este tiempo de API’s, extensibilidad y otros, resulta util poder disponer de una forma fácil de devolver información en un formato diferente al tradicional HTML. Por suerte con CakePHP hacer esto es muy facil.

Lo que les dejo es una forma de generar, automáticamente, respuestas en formato JSON, utiles para el desarrollo de aplicaciones AJAX, pero es facilmente modificable para considerar otros formatos de respuesta. Los pasos son los siguientes:

  1. Hacer que CakePHP considere la extensión json y la maneje adecuadamente: (config/routes.php)
    1
    
    Router::parseExtensions('json');

    Crear un layout para todas las peticiones en formato JSON: (views/layout/json/default.ctp)

    1
    2
    3
    4
    5
    6
    7
    8
    
    < ?php
    	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;
    ?>
  2. Crear una vista para todas las respuestas en formato JSON: (views/common/json.ctp)
    1
    2
    3
    
    < ?php
    	echo $javascript->object($this->viewVars); 
    ?>
  3. De modo de no tener que definir en cada acción la vista que se debe utilizar podemos modificar AppController: (app_controller.php)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function afterFilter(){
     
    	if ($this->params['url']['ext']=='json'){
    		$_view = ROOT . DS . APP_DIR . DS . "views" . DS . "common" . DS . "json.ctp";
    		Configure::write("debug",0);
    		$this->autoRender=false;
    		$this->render(null,"default",$_view);
     
    	}
    }

Hecho esto todas las peticiones que sean .json automáticamente serán devueltas como json, con todos los datos que se hayan pasado a la vista a traves de Controller::set();

Espero le sea de utilidad a alguien más, comentarios se aceptan.

Tags: , , , ,

6 Comments Add your own

  • Dani | March 17th, 2008 at 11:52


    Esta bueno, publícalo en bakers.bligoo.com

  • Diego | March 17th, 2008 at 11:56


    Cuánto hace que no toco Cake… en semana Santa me echo una aplicación :P

  • pviojo | March 17th, 2008 at 12:12


    @Diego: Por ahi, te podrías reescribir keegy! je :D

  • pviojo | March 17th, 2008 at 12:27


    @dani: Bienvenido por estos lados. Ya está publicado!

  • pedrof | May 15th, 2008 at 13:43


    Hey! gracias por este post.

    Sin embargo, estoy teniendo problemas siguiendolo, cake me renderea toda la pagina y abajo el json… muy raro.

    Tienes idea de que puede ser?

  • pviojo | May 15th, 2008 at 23:23


    @Pedro: lo desarrollé usando la versión de cakephp branch, no la beta que está en el sitio, por lo que puede ser que no te funcione bien si usas esta versión. En cualquier caso en unos días, dependiendo de la próxima versión de cake que se libere, le voy a dar una revisión.

  • Leave a Reply

    XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    (required)

    (required)

About

Mi nombre es Pablo Viojo y tengo 26 años. Nací en el Uruguay el 7 de agosto de 1981. Actualmente vivo en Santiago, Chile

Aparte de esto me interesa todo lo que tenga que ver con Internet y las nuevas tecnologías. Más info aquí, mi hCard, en formato FOAF

View Pablo Viojo's profile on LinkedIn



Recent Comments

Pages

Feeds

Posts by tags

Posts by month