我也有同样的问题。现在,之前的回复不起作用的原因是 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 变量正常编写代码,就像参数实际有效时所做的那样。