gpt4 book ai didi

php - 如何在 JSON 响应中呈现 ZF2 View ?

转载 作者:IT王子 更新时间:2023-10-28 23:55:32 25 4
gpt4 key购买 nike

到目前为止,我已经弄清楚了如何在 Zend Framework 2 中返回典型的 JSON 响应。首先,我添加了 ViewJsonStrategystrategiesview_manager配置。然后,而不是返回 ViewModel来自 Controller 操作的实例,我返回一个 JsonModel设置了我所有变量的实例。

现在我已经弄明白了,我需要了解如何呈现 View 并在该 JSON 响应中返回它。在 ZF1 中,我可以使用 $this->view->render($scriptName) ,它以字符串形式返回 HTML。在 ZF2 中,Zend\View\View::render(...)方法返回 void .

那么...我如何呈现 HTML View 脚本并在一个请求中以 JSON 响应返回它?

这是我现在拥有的:

    if ($this->getRequest()->isXmlHttpRequest()) {
$jsonModel = new JsonModel(...);

/* @todo Render HTML script into `$html` variable, and add to `JsonModel` */
return $jsonModel;
} else {
return new ViewModel(...);
}

最佳答案

好的,我想我终于明白你在做什么了。我找到了一个我认为符合您标准的解决方案。虽然我确信还有改进的空间,因为有一些令人讨厌的手工工作要做......

public function indexAction()
{
if (!$this->getRequest()->isXmlHttpRequest()) {
return array();
}

$htmlViewPart = new ViewModel();
$htmlViewPart->setTerminal(true)
->setTemplate('module/controller/action')
->setVariables(array(
'key' => 'value'
));

$htmlOutput = $this->getServiceLocator()
->get('viewrenderer')
->render($htmlViewPart);

$jsonModel = new JsonModel();
$jsonModel->setVariables(array(
'html' => $htmlOutput,
'jsonVar1' => 'jsonVal2',
'jsonArray' => array(1,2,3,4,5,6)
));

return $jsonModel;
}

如您所见,我创建的 templateMap 是......讨厌......它很烦人,我相信它可以改进很多。这是一个可行的解决方案,但不是一个干净的解决方案。也许有人能够以某种方式从 ServiceLocator 中获取可能已经实例化的默认 PhpRenderer,并使用它的模板和路径映射,然后它应该更干净。

感谢@DrBeza 的评论,需要完成的工作可以减少相当多的数量。现在,正如我最初想要的那样,我们将获取所有模板映射完整的 View 渲染器,并直接渲染 ViewModel。唯一重要的因素是您需要指定要呈现的完全限定模板(例如:“$module/$controller/$action”)

我希望这能让你开始;)

PS:响应如下:

Object:
html: "<h1>Hello World</h1>"
jsonArray: Array[6]
jsonVar1: "jsonVal2"

关于php - 如何在 JSON 响应中呈现 ZF2 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12451399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com