Zend framework2 ZendFramework2中的Restful控制器-其参数如何工作?
这是我对create函数的单元测试:Zend framework2 ZendFramework2中的Restful控制器-其参数如何工作?,zend-framework2,Zend Framework2,这是我对create函数的单元测试: public function testCreate() { $this->routeMatch->setMatchedRouteName('restful'); $this->request->setMethod('POST') ->setContent('name=A'); $result = $this->controller->dispatch
public function testCreate() {
$this->routeMatch->setMatchedRouteName('restful');
$this->request->setMethod('POST')
->setContent('name=A');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertEquals(403, $response->getStatusCode());
$this->assertArrayHasKey('id', $result);
}
public function create($data) {
if (empty($data)) {
$this->response->setStatusCode(400);
return;
}
for ($i = 0; $i < count(self::$ideas); $i++) {
if (self::$ideas[$i]['name'] == $data['name']) {
$this->response->setStatusCode(404);
return;
}
}
//@todo: secure the API
self::$index++;
$tmpArray = array('id'=>self::$index, 'name'=>$data['name']);
$this->response->setStatusCode(403);
}
这是我的职责:
public function testCreate() {
$this->routeMatch->setMatchedRouteName('restful');
$this->request->setMethod('POST')
->setContent('name=A');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertEquals(403, $response->getStatusCode());
$this->assertArrayHasKey('id', $result);
}
public function create($data) {
if (empty($data)) {
$this->response->setStatusCode(400);
return;
}
for ($i = 0; $i < count(self::$ideas); $i++) {
if (self::$ideas[$i]['name'] == $data['name']) {
$this->response->setStatusCode(404);
return;
}
}
//@todo: secure the API
self::$index++;
$tmpArray = array('id'=>self::$index, 'name'=>$data['name']);
$this->response->setStatusCode(403);
}
公共函数创建($data){
if(空($数据)){
$this->response->setStatusCode(400);
返回;
}
对于($i=0;$iresponse->setStatusCode(404);
返回;
}
}
//@todo:保护API
self::$index++;
$tmpArray=array('id'=>self::$index,'name'=>$data['name']);
$this->response->setStatusCode(403);
}
但美元数据似乎总是空白的。我在部件编写单元测试中错了吗?
当我尝试将curl POST与-d
一起使用时,$data的值与我通过curl
发布的值相同。我很困惑这里怎么了
感谢阅读并期待您的回答:)
回答
我成功地完成了单元测试
有关更多信息,我使用实现restful控制器如果查看\Zend\Mvc\controller\AbstractRestfulController方法processPostData,您会注意到在控制器中创建的方法从请求对象获得了一个post参数数组 如果查看\Zend\Http\Request,$postParams属性由setPost方法填充 现在,子类\Zend\Http\PhpEnvironment\Request(由ZF2在请求某些内容时使用)在实例化时扩展\Zend\Http\Request(如上所述)(\uuuu construct method)调用setPost方法(如上所述),为其提供$\u POST数组 这意味着ZF2最终会在内部为控制器的create方法提供$\u POST内容,而不是解析请求体 现在来看看你的代码 我认为,如果您没有先设置事件框架,dispatch将一事无成。相反,您可以调用controllers execute方法,为其提供MvcEvent。MvcEvent需要设置您实例化的请求。 其次,如上所述,您需要调用请求的setPost并为其提供一个数组,以便create方法正常工作。(另一方面,PUT从请求主体读取数据)
尝试这样做,如果您仍然有问题,我会尝试尽快给您举个例子。您能粘贴您的路线配置吗?@DanielM我使用的模块来自#scaraveous:谢谢您的回答。我试图自己创建一个测试,看看我是否能想出什么:)让我知道它是如何进行的。现在做这些事情已经太晚了:)谢谢你的帮助@scaraveos。我想出了一个有效的测试:很好!总是乐于助人。