edi*_*igu 2 xml api rest zend-framework2
我正在开发一个小型ZF2应用程序,它为客户端提供了一些API端点.它通过JSON返回一些简单的数据.
它有一个FooController扩展BaseRestController和AbstractRestfulController:
FooController extends BaseRestController
{
// ....
public function getList()
{
$data = array('foo' => 'bar');
return $this->send($data);
}
}
Run Code Online (Sandbox Code Playgroud)
和:
BaseRestController extends AbstractRestfulController
{
// ...
public function send($data)
{
return new JsonModel($data);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想根据用户的选择通过XML返回相同的数据.我想我必须在我的send()方法中做这样的事情BaseRestController:
if ($format === 'json') {
return new JsonModel($data);
} else {
return new XmlModel($data);
}
Run Code Online (Sandbox Code Playgroud)
我查看了内置的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格式的结构化数据吗?
应该有另一种选择,我想学习并了解实现这一目标的正确方法是什么?
如果您只想在一个操作中使用它,则不需要xmlModel.
只需将您的数据转换为正确的XML,然后:
$response = new \Zend\Http\Response();
$response->getHeaders()->addHeaderLine('Content-Type', 'text/xml; charset=utf-8');
$response->setContent($xml);
return $response;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3843 次 |
| 最近记录: |