2010-09-15 5 views
6

Dans le contrôleur, je génère un formulaire spécial par ID, transmis par AJAX. La sortie du formulaire est JSON. La forme crée finement. Mais mon problème est de montrer ce JSON en vue. Comment?Sortie Zend Framework JSON

Merci.

Répondre

1

La façon la plus simple est d'arrêter vue d'être exécuté:

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

Voir aussi vérifier si http://pl.php.net/json_encode vous n'avez pas déjà chaîne JSON.

2

JSON est une chaîne encodée contenant vars dans le style js si vous avez besoin pour accéder au membre de cette chaîne que vous devez json_decode la chaîne de sorte

$result = json_decode($jsonString); 

mais notez que traiter JSON tableau associatif php comme objet php. .. donc si vous passez un tableau, vous pouvez y accéder comme $ result-> memberReference not $ result ['memberReference'];

+0

..unless Bien sûr, vous spécifiez simplement'on' comme numéro de paramètre 2 : 'json_decode ($ jsonString, true)', car il retournera alors un 'array' au lieu d'un' stdObject'. – h2ooooooo

1

Vous pouvez utiliser la classe Zend

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

Ou vous pouvez utiliser scénario avancé comme:

$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

C'est utile si vous utilisez AJAX qui obtient json de nouvelles données encodées avec des objets :) –

1

La meilleure façon todo ce à mon avis, est d'assigner un contrôleur comme JSON, vous pouvez le faire:

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); 
    } 

}