我想从EXTJS 4 rest代理向Zend 2 restful控制器发布数据。 但是当我用firebug检查时,我发现有post数据,但是我无法获取那些数据。如何获取该帖子数据以在我的方法中使用它。 我错了,我无法弄清楚。 任何人都有步骤将数据从其余的Extjs 4代理方法发布到Zend?
答案 0 :(得分:0)
PHP中从HTTP请求正文加载JSON的标准方法是使用
$some_json = file_get_contents('php://input');
$some_object = json_decode($some_json);
我不知道Zend2是否有自己的方式。
答案 1 :(得分:0)
ExtJS
向网址发送sort
,page
,filter
等代数,例如: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参数。有关详细信息,请访问:
如果您有兴趣,我正在为Sencha
开发我的REST代理,我已经使用ExtJS
和Sencha Touch
框架进行了测试,它支持分页,远程过滤,远程排序等等
它是使用Zend Framework 2开发的,可能在同一个安装上支持不同的数据库类型。看看:
答案 2 :(得分:-1)
我有完全相同的问题。现在,之前的回复不起作用的原因是因为Zend Studio 10有一个新功能,用于从可视编辑器配置REST服务,该编辑器接收参数并创建路由。这个服务设计者实际上是接受Restful服务的POST操作的主体参数,但它忽略了从ExtJS发送的JSon。更糟糕的是,如果你使用Zend Studio 10中的集成GUI测试服务,它可以很好地工作,并且生成的JSon与ExtJS中的生成完全相同(我实际执行了一些数据转换以达到这一点),并且它不起作用。
真正的问题是,POST方法中的'某些东西'在ExtJS请求中是不同的,而不是从框架本身预期的JSon,它抽象代码从开发人员反序列化这个JSon。
真正的问题是,什么是Zend Server Gateway库期望ExtJS以不同的方式在POST主体中发送?如果这里有成千上万的专家能够检查出来并得到正确的答案,我将非常感激。将回答这个问题的人必须拥有或下载Zend Studio 10的试用版并自行检查ZS10附带的Visual Service Tool是如何工作的。到目前为止,我发现ExtJS4产生的JS就像这样:
{"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变量编写代码,就像参数实际可行时一样。