Как захватить вывод представления Zend вместо его фактического вывода - PullRequest
6 голосов
/ 27 сентября 2010

Проблема: иногда в нашем Zend-контроллере мы не хотим, чтобы скрипт выводился напрямую, а хотим, чтобы содержимое этого скрипта.Один пример: когда нам нужно, чтобы результат html-вывода сценария представления был включен в другую структуру, такую ​​как JSON или XML, для обработки на стороне клиента.

Я нашел результат здесь при переполнении стека, но не так быстро, так какэто было в другом контексте.Я боролся с этим в течение 2 дней.Как оказалось, все было очень просто:

    // in our controllers' action method
    $this->_helper->layout()->setLayout('empty');    // disable layout
    $this->_helper->viewRenderer->setNoRender(true); // make sure the script is not being rendered

    // any of your code here
    $html = $this->view->render('projects/climate.phtml');  // return the view script content as a string
    $json = array('html'=>$html, 'initData'=>'my other needed data');
    echo json_encode($json);

Надеюсь, это было понятно и кому-нибудь пригодится.

1 Ответ

9 голосов
/ 28 сентября 2010

Попробуйте использовать

public myAction () {
    $this->_helper->json(array(
        'html'    => $this->view->render('projects/climate.phtml'),
        'initData'=> 'my other needed data',
    ));
}

Помощник действий Json обычно

  • отключит viewRenderer
  • , отключит макет
  • json_encode массив
...