2014-02-11 61 views
3

我有以下的JSON字符串:Zend框架2 - 返回JSON從控制器

var jsonString = '{"Users":[{"Name":"abc","Value":"test"},{"Name":"def","Value":"test"}]}'; 

我想使用ZF2的JsonModel類(Zend的\查看\型號\ JsonModel)控制器來呈現我的看法與上面的JSON字符串。但是,它似乎只需要一個數組而不是JSON字符串。

如何讓控制器返回一個JSON字符串?

感謝

回答

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

官方文檔:http://framework.zend.com/manual/2.2/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-acceptableviewmodelselector

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

這將短路dispatch事件,所以該應用程序將返回您的響應立即,而無需調用視圖圖層來呈現它。

請參閱http://framework.zend.com/manual/2.2/en/modules/zend.mvc.examples.html#returning-early