2010-09-15 27 views
6

En el controlador estoy generando un formulario especial por ID, pasado desde AJAX. La salida del formulario es JSON. La forma crea finamente Pero mi problema es mostrar este JSON a la vista. ¿Cómo?Zend Framework JSON Output

Gracias.

Respuesta

1

La forma más sencilla es dejar de vista de ser ejecutado:

function jsonAction() { 
    .... 
    print $json; 
    exit; 
} 

ver también comprobar http://pl.php.net/json_encode si usted no tiene ya cadena JSON.

2

JSON es una cadena codificada que contiene VARs en el estilo de JS si necesita acceder al miembro de esta cadena que necesita para json_decode la cadena para

$result = json_decode($jsonString); 

pero tenga en cuenta que JSON tratar matriz PHP asociativo como objeto php. .. así que si pasas una matriz puedes acceder a ella como $ result-> memberReference not $ result ['memberReference'];

+0

..unless por supuesto que acaba de especificar 'true' como parámetro el número 2 : 'json_decode ($ jsonString, true)', ya que luego devolverá una 'matriz' en lugar de' stdObject'. – h2ooooooo

1

Usted puede utilizar la clase Zend

$sData = Zend_Json::encode($aArray); 

o puede utilizar escenario avanzado como:

$data = array(
    'onClick' => new Zend_Json_Expr('function() {' 
    . 'alert("I am a valid javascript callback ' 
    . 'created by Zend_Json"); }'), 
'other' => 'no expression', 
); 

$jsonObjectWithExpression = Zend_Json::encode($data,false, 
    array('enableJsonExprFinder' => true) 
); 
+0

Es útil si usa AJAX que obtiene datos codificados json con nuevos objetos :) –

1

La mejor manera de TODO esto en mi opinión es la asignación de un controlador como salida JSON, entonces usted puede hacer esto:

class Api_IndexController extends Zend_Controller_Action { 


    public function init() { 
     $this->data = array(); 
    } 


    public function preDispatch() { 
     $this->variables = $this->_getAllParams(); 
    } 


    public function postDispatch() { 
     $this->_helper->json($this->data); 
    } 


    public function __call($name, $args) { 
     return; 
    } 


    public function forumAction() { 

     $this->mapper = new ORM_Model_Mapper_Forum(); 
     $this->model = new ORM_Model_Forum(); 
     $this->dbTable = new ORM_Model_DbTable_Forum(); 

     if (isset($this->variables['id']) && is_numeric($this->variables['id'])) { 
      $output = $this->model->find($this->variables['id']); 

      if ($output->id == null) { 
       return $this->_setError(404); 
      } 
     } else { 
      $output = $this->mapper->fetchAllToArray(); 
     } 

     $this->data = $output; 
    } 


    private function _setError($code=500) { 
     $this->data = array('error' => $code); 
    } 

}