Установить ответ Zend в переменную - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть действие, которое возвращает JSON. Мне нужно вызвать его из другого контроллера, и мне нужно передать этот ответ в переменную для анализа JSON.

Я пробовал:

private function makeListFromUrl($menu)
{
    $req = new Zend_Controller_Request_Http();
    $req->setRequestUri('/module/controller/get.json/');

    $res = new Zend_Controller_Response_Http();
    $dis = $this->getFrontController()->dispatch($req, $res);

    $dis->dispatch($req, $res);

    $json = $res->getBody();

    return Zend_Json::decode($json);
}

Но этот код заставляет фронт-контроллер отображать действие, переопределяя фактическое действие. Я просто хочу сделать запрос, получить ответ в переменную, оставив фактический запрос без изменений.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2012

Вы должны установить returnResponse (true), чтобы FrontController отправлял ответ обратно.

private function makeListFromUrl($menu)
{
    $req = new Zend_Controller_Request_Http();
    $req->setRequestUri('/module/controller/get.json/');

    $front = Zend_Controller_Front::getInstance();
    $front->returnResponse(true);
    $response = $front->dispatch($requestObj);

    $json = $res->getBody();

    return Zend_Json::decode($json);
}
0 голосов
/ 17 декабря 2009

У меня есть простое решение для этого, не уверен, что это лучшее, но работал очень хорошо.

$actionHelper = new Zend_View_Helper_Action();

$var = $actionHelper->action('action', 'controller', 'module', $params);

так же, как вы делали бы внутри вида, но в контроллере.

Надеюсь, это кому-нибудь поможет.

...