Zend Framework JSON Output - PullRequest
       3

Zend Framework JSON Output

6 голосов
/ 15 сентября 2010

В контроллере я генерирую специальную форму по идентификатору, переданную из AJAX. Форма вывода в формате JSON. Форма создает прекрасно. Но моя проблема состоит в том, чтобы показать этот JSON в поле зрения. Как?

Спасибо.

Ответы [ 5 ]

23 голосов
/ 15 сентября 2010

В контроллере (http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.json):

$this->getHelper('json')->sendJson(array(
    'param1' => 'v1'
    'param2' => 'v2'
));

В поле зрения (http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.json):

<?php
echo $this->json(array(
    'param1' => 'v1'
    'param2' => 'v2'
));
?>
2 голосов
/ 15 сентября 2010

json - это закодированная строка, содержащая переменные в стиле js. Если вам нужен доступ к члену в этой строке, вам нужно json_decode строки, чтобы

$result = json_decode($jsonString);

, но обратите внимание, что json обрабатывает ассоциативный массив php как объект php... так что если вы передадите массив, вы сможете получить к нему доступ как $ result-> memberReference, а не $ result ['memberReference'];

1 голос
/ 21 сентября 2012

На мой взгляд, лучший способ сделать это - назначить один контроллер в качестве вывода json, тогда вы можете сделать это:

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

}
1 голос
/ 15 сентября 2010

Вы можете использовать класс Zend

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

Или вы можете использовать расширенный сценарий, например:

$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)
  );
1 голос
/ 15 сентября 2010

Самый простой способ - остановить выполнение представления:

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

Также см. Проверку http://pl.php.net/json_encode, если у вас уже нет строки JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...