我有以下Json字符串:
var jsonString = '{"Users":[{"Name":"abc","Value":"test"},{"Name":"def","Value":"test"}]}';
我试图在控制器中使用ZF2的JsonModel类(Zend \ View \ Model \ JsonModel)来使用上面的JSON字符串渲染我的视图。但是,它似乎只采用数组而不是JSON字符串。
如何让控制器返回JSON字符串?
由于
答案 0 :(得分:5)
您不需要使用JsonModel,因为您的json已经“呈现”了,因此,您可以直接在响应对象中设置它并返回它:
/**
* @return \Zend\Http\Response
*/
public function indexAction()
{
$json = '{"Users":[{"Name":"abc","Value":"test"},{"Name":"def","Value":"test"}]}';
$this->response->setContent($json);
return $this->response;
}
这会使调度事件短路,因此应用程序将立即返回您的响应,而不会调用视图层来呈现它。
请参阅http://framework.zend.com/manual/2.2/en/modules/zend.mvc.examples.html#returning-early
答案 1 :(得分:2)
您必须使用acceptableViewModelSelector
控制器插件
public function listAction()
{
$acceptCriteria = array(
'Zend\View\Model\ViewModel' => array(
'text/html',
),
'Zend\View\Model\JsonModel' => array(
'application/json',
));
$viewModel = $this->acceptableViewModelSelector($acceptCriteria);
Json::$useBuiltinEncoderDecoder = true;
$itemsList = $this->getMyListOfItems();
return $viewModel->setVariables(array("items" => $itemsList));
}
答案 2 :(得分:1)
另一个好处:解释为什么使用这个插件
答案 3 :(得分:1)
添加module.config.php
:
'strategies' => [
'ViewJsonStrategy',
],
然后您可以返回控制器json响应:
return new JsonModel(['some'=>'data']);