2015-04-23 96 views
1

我正试图通过curl与两个zf2应用程序建立通信。所需响应在xml中。到目前为止,我可以建立连接,并返回xml作为响应。在ZF2中实现卷曲

问题

的问题是,我不能在我的xml response。每当我遍历和的var_dump我$response->getContent的视图源代码,我得到尽可能

string(142) "<?xml version="1.0" encoding="UTF-8"?> 
<myxml> 
<login> 
<status>success</status> 
<Err>None</Err> 
</login> 
</myxml> 
" 

,当我只需var_dump我的$response,我得到一个object(Zend\Http\Response)#440

simplexml_load_string($response->getContent())给了我一个空白页。

另外print $data->asXML()给我Call to a member function asXML() on a non-object错误。我在这里做错了什么?

卷曲请求动作

$request = new \Zend\Http\Request(); 
    $request->getHeaders()->addHeaders([ 
     'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8' 
    ]); 
    $request->setUri('http://localhost/app1/myaction'); 
    $request->setMethod('POST'); //uncomment this if the POST is used 
    $request->getPost()->set('curl', 'true'); 
    $request->getPost()->set('email', '[email protected]'); 
    $request->getPost()->set('password', '2014'); 

    $client = new Client; 
    $client->setAdapter("Zend\Http\Client\Adapter\Curl"); 

    $response = $client->dispatch($request); 

    var_dump($response);//exit; 
    //$response = simplexml_load_string($response->getContent()); 
    //echo $response;exit; 
    return $response; 

卷曲响应行动

  $php_array=array(
     'login'=>array(
     'status'=>'failed','Err'=>'Unauthorised Access' 
     ) 
     ); 
     $Array2XML=new \xmlconverter\Arraytoxml; 
     $xml = $Array2XML->createXML('myxml', $php_array); 
     $xml = $xml->saveXML(); 
     //echo $xml;exit; 
      $response = new \Zend\Http\Response(); 
      $response->getHeaders()->addHeaderLine('Content-Type', 'text/xml; charset=utf-8'); 
      $response->setContent($xml); 
      return $response; 

Array2XML可以发现here

任何想法?

+1

simplexml_load_string返回一个对象SimpleXMLElement – Hooli

+3

如果你得到一个空白页面,你有关闭显示错误(这是ZF默认值)。检查Web服务器错误日志以查看实际错误。 –

+0

您是否尝试过使用原始CURL而不是zf2适配器? – Conti

回答

1

时,我只是我的var_dump $回应,我得到一个对象(Zend的\ HTTP \响应)#440

这是正确的,它会告诉你的$response类型。

simplexml_load_string($ response-> getContent())给了我一个空白页。

这是正确的,因为尽管此函数可以返回一个可表达为空字符串的值,但它不会自行创建任何输出,因此预期会出现空白页。

任何想法?

首先,你应该制定一个适当的问题陈述与你的问题。你所期望的所有内容都是可以预料的,所以你的问题至多不清楚。

其次,你需要做适当的错误处理,并做一些安全的编程:

$buffer = $response->getContent(); 
if (!is_string($buffer) || !strlen($buffer) || $buffer[0] !== '<') { 
    throw new RuntimeException('Need XML string, got %s', var_export($buffer, 1)); 
} 
$xml = simplexml_load_string($buffer); 
if (false === $xml) { 
    throw new RuntimeException('Unable to parse response string as XML'); 
} 

那就是:对于你每一个参数,验证它。对于您收到的每个功能或方法结果,请检查后续条件。在调用函数或方法之前,请检查每个参数的前提条件。

将错误记录到文件并处理未捕获的异常。

作为一个附加想法:将数组的使用放到XML函数中,并将其替换为维护的库。在你的情况下,使用你自己的SimpleXML来创建XML可能更容易。