在ZF2中如何默认返回JsonModel?

在ZF2中如何默认返回JsonModel?,json,zend-framework2,zend-view,Json,Zend Framework2,Zend View,默认ViewModel不是必需的,我可以从控制器返回数据数组: public function someAction() { //... return array('result'=>$data); } 但我不能将这种方法用于Json。在dispatch事件中,我应该如何将结果包装到JsonModel中,以获得相应的accept标头?您必须在module.config.php下的视图管理器中添加ViewJsonStrategy策略: 'view_manager' => ar

默认ViewModel不是必需的,我可以从控制器返回数据数组:

public function someAction()
{
  //...
  return array('result'=>$data);
}

但我不能将这种方法用于Json。在dispatch事件中,我应该如何将结果包装到JsonModel中,以获得相应的accept标头?

您必须在module.config.php下的视图管理器中添加ViewJsonStrategy策略:

'view_manager' => array(
    'template_map'              => array(
    ),
    'template_path_stack'       => array(
        __DIR__ . '/../view',
    ),
    'strategies'                => array(
        'ViewJsonStrategy',
    ),
), 
然后,您可以在操作中返回JsonModel:

public function myAction()
{
    $data = [1, 2, 3, 4];

    return new JsonModel([
        'data' => $data
    ]);
}

您必须在module.config.php下的视图管理器中添加ViewJsonStrategy策略:

'view_manager' => array(
    'template_map'              => array(
    ),
    'template_path_stack'       => array(
        __DIR__ . '/../view',
    ),
    'strategies'                => array(
        'ViewJsonStrategy',
    ),
), 
然后,您可以在操作中返回JsonModel:

public function myAction()
{
    $data = [1, 2, 3, 4];

    return new JsonModel([
        'data' => $data
    ]);
}

要从控制器获取json数据,您可以回显json编码的数据并退出。我将其用于jqueryajax。我希望这就是你要找的

public function testAction()
{
    $active = "some data";
    echo json_encode(array('result' => $active));
    exit();
}
然后在jquery中,您可以得到这样的数据

$.ajax({
              type: 'GET',
              url: '/index/time',
              dataType: 'json',
              error: function() {
                 $('#info').html('<p>Error on time calculation</p>');
              },
              success: function(data) {
                  data.result
              }
 });

要从控制器获取json数据,您可以回显json编码的数据并退出。我将其用于jqueryajax。我希望这就是你要找的

public function testAction()
{
    $active = "some data";
    echo json_encode(array('result' => $active));
    exit();
}
然后在jquery中,您可以得到这样的数据

$.ajax({
              type: 'GET',
              url: '/index/time',
              dataType: 'json',
              error: function() {
                 $('#info').html('<p>Error on time calculation</p>');
              },
              success: function(data) {
                  data.result
              }
 });
这真的很简单

增加如下:

IndexController.php api.phtml

这真的很简单

增加如下:

IndexController.php api.phtml


只需为所有API控制器创建基本控制器,并替换MvcEvent中的模型

class JsonRestController extends AbstractRestfulController
{

    public function onDispatch(MvcEvent $e)
    {
        $e->setViewModel(new JsonModel());
        return parent::onDispatch($e);
    }
}

只需为所有API控制器创建基本控制器,并替换MvcEvent中的模型

class JsonRestController extends AbstractRestfulController
{

    public function onDispatch(MvcEvent $e)
    {
        $e->setViewModel(new JsonModel());
        return parent::onDispatch($e);
    }
}

一般来说,如果答案中包含对代码意图的解释,以及在不介绍其他代码的情况下解决问题的原因,那么答案会更有帮助。谢谢,我是新来的。我以后会考虑你的建议。你为什么要退出?相反,您可以返回json_encode。。。;我想说,最好返回一个JsonModel,因为这也会在响应中设置正确的标题。一般来说,如果答案包括对代码意图的解释,以及在不介绍其他代码的情况下解决问题的原因,那么答案会更有帮助。谢谢,我是新来的。我以后会考虑你的建议。你为什么要退出?相反,您可以返回json_encode。。。;我想说,最好返回一个JsonModel,因为这也会在响应中设置正确的头。我的问题是-如何避免每次返回时手动使用JsonModel?我现在处理API模块,所以除了JSON或XMLL之外,我不需要任何其他视图类型。我的问题是——如何避免每次返回时都手动使用JsonModel?我现在处理API模块,所以除了JSON或XML之外,我不需要任何其他视图类型