Slim - 将原始数据字符串传递给请求正文

时间:2017-02-21 16:39:16

标签: php slim

我在Slim中为我的API端点执行单元测试。这是我用来将数据传递到端点的原因:

$requestData = [
    'field1' => 123,
    'field2' => 4567,
    ....
]    
$request->withParsedBody($requestData);

现在需要使用XML或JSON字符串测试端点,如下所示 -

    $requestData = '<xml>
           <appid><![CDATA[app123]]></appid>
           <device_info><![CDATA[test-device-5678]]></device_info>
           ....
           </xml>';
    $request->withParsedBody($requestData);

问题是withParsedBody()只接受数组或对象。所以我的问题是:将原始数据字符串传递给请求的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这是基于Dusan评论的答案。

        $request->getBody()->write($requestData);
        $request->reparseBody();

reparseBody()调用将强制请求对象再次解析新内容。

答案 1 :(得分:0)

对我来说会更好

$requestData = '<xml>
           <appid><![CDATA[app123]]></appid>
           <device_info><![CDATA[test-device-5678]]></device_info>
           ....
           </xml>';

$streamFactory = new \Zend\Diactoros\StreamFactory();
$stream = $streamFactory->createStream($requestData);

$request->withBody($stream);

echo (string) $request->getBody();