-1

我想从 EXTJS 4 rest 代理将数据发布到 Zend 2 restful 控制器。但是当我用萤火虫检查时,我发现有帖子数据,但我无法获取该数据。如何获取该帖子数据以在我的方法中使用它。我在哪里弄错了,我无法弄清楚。任何人有步骤将数据从 REST Extjs 4 代理方法发布到 Zend?

4

3 回答 3

0

PHP 中从 HTTP 请求正文加载 JSON 的标准方法是使用

$some_json = file_get_contents('php://input');
$some_object = json_decode($some_json);

我不知道 Zend2 是否有自己的方法。

于 2013-01-20T20:06:46.307 回答
0

ExtJSsort将, page,等参数发送filter到 URL,例如:http://myhost.com/?page=2&sort=myfield.

在这种情况下,您只需从您的RESTController操作中截取查询参数:

$page   = $this->params()->fromQuery('page');
$sort   = $this->params()->fromQuery('sort');

到 ZF2 REST 控制器的数据传输取决于您使用的 HTTP 方法:

  • GET, PUT,DELETE接收$id参数;
  • POST用于创建新记录并接收 $data 参数。

有关更多信息,您可以在这里查看:

http://framework.zend.com/manual/current/en/modules/zend.mvc.controllers.html#the-abstractrestfulcontroller

如果您有兴趣,我正在开发我的 REST 代理Sencha,我已经使用ExtJSSencha Touch框架进行了测试,它支持分页、远程过滤器、远程排序等。

它是使用 Zend Framework 2 开发的,可以在同一安装中支持不同的 DB 类型。看一下:

http://apiskeleton.asaconsult.com/

于 2015-06-05T09:36:39.827 回答
-1

我也有完全一样的问题。现在,之前的回复不起作用的原因是 Zend Studio 10 有一个新功能,可以从一个可视化编辑器配置 REST 服务,该编辑器接收参数并创建路由。这个服务设计者实际上接受了 Restful 服务的 POST 操作的主体参数,但它以某种方式忽略了从 ExtJS 发送的 JSon。更糟糕的是,如果您使用 Zend Studio 10 中的集成 GUI 测试该服务,它可以完美运行,并且生成的 JSon 与来自 ExtJS 的 100% 相同(我实际上执行了一些数据转换以达到这一点),并且它不起作用。

真正的问题是 POST 方法中存在与 ExtJS 请求不同的“某些东西”,而不是框架本身所期望的 JSon,它从开发人员那里抽象出用于反序列化此 JSon 的代码。

真正的问题是,Zend 服务器网关库期望 ExtJS 在 POST 正文中以不同的方式发送什么?如果这里成千上万的专家中的任何一位可以检查一下并给出正确的答案,我将不胜感激。回答这个问题的人必须拥有或下载 Zend Studio 10 的试用版,并亲自检查 ZS10 附带的 Visual Service Tool 是如何工作的。到目前为止,我发现 ExtJS4 像这样生成它的 JSON:

{"data":
 {"IdCurso":"0","Nombre":"NodeJS","IdEstadoCurso":"1",
  "IdTipoPeriodo":"1","CantPeriodo":"1","CantAsignatura":"1","IdPlantel":"1"}
}

用于测试服务的 Zend GUI 生成(并且服务接受)JSON,如下所示:

{
    'data' : '{"Nombre":"NodeJS","IdEstadoCurso":"1","IdTipoPeriodo":"1","CantPeriodo":"1","CantAsignatura":"1","IdPlantel":"1","IdCurso":"0"}'
}

如您所见,数据用单引号括起来,其内容也可供 Zend Framework 毫无问题地使用它。ExtJS 使用双引号,并且不引用数据包本身的内容。

这是一个真正有效的补丁,不是最终的解决方案,如果有人找到更好的解决方案,那就太好了。

试试这个作为 add() (POST) 方法中的第一条指令:

$data = json_decode($this->getRequest()->getContent());

您可能需要添加以下内容:

$data = (array) $data;

之后,继续使用 $data 变量正常编写代码,就像参数实际工作时所做的那样。

于 2013-03-10T06:05:00.080 回答