当前位置:  开发笔记 > 后端 > 正文

在Zend Framework 2应用程序中返回XML响应的正确方法是什么?

如何解决《在ZendFramework2应用程序中返回XML响应的正确方法是什么?》经验,为你挑选了1个好方法。

我正在开发一个小型ZF2应用程序,它为客户端提供了一些API端点.它通过JSON返回一些简单的数据.

它有一个FooController扩展BaseRestControllerAbstractRestfulController:

FooController extends BaseRestController
{
    // ....
    public function getList()
    {
        $data = array('foo' => 'bar');
        return $this->send($data);
    }
 }

和:

BaseRestController extends AbstractRestfulController
{
    // ...
    public function send($data)
    {
        return new JsonModel($data);
    }
}

现在我想根据用户的选择通过XML返回相同的数据.我想我必须在我的send()方法中做这样的事情BaseRestController:

if ($format === 'json') {
    return new JsonModel($data);
} else {
    return new XmlModel($data);
}

我查看了内置的JsonModel,它扩展Zend\View\Model\ViewModel并添加了serialize()将变量序列化为JSON的方法.

我想我必须写一个类似的XmlModel,但我无法弄清楚如何正确编写这个模型,以及告诉我的控制器这个新模型的正确方法是什么.

要实现这一目标需要哪些类/工厂/渲染器/策略?

我阅读了文档的创建和注册备用渲染和响应策略部分,但是所有现有解决方案都检查了Accept HTTP标头,我不需要与标头交互,客户端只需将所需格式作为路由参数传递到我的应用程序中,/rest/foo?format=json或者/rest/foo?format=xml

我还在bitbucket上找到了Netglue扩展,他们写了5个不同的Mvc服务类加上3个其他模型/渲染器/策略总共8个类,这听起来对我来说太过分了.

真正的问题是,真正需要编写八种不同的类来转换和返回XML格式的结构化数据吗?

应该有另一种选择,我想学习并了解实现这一目标的正确方法是什么?



1> Exlord..:

如果您只想在一个操作中使用它,则不需要xmlModel.
只需将您的数据转换为正确的XML,然后:

$response = new \Zend\Http\Response();
$response->getHeaders()->addHeaderLine('Content-Type', 'text/xml; charset=utf-8');
$response->setContent($xml);
return $response;

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有