gpt4 book ai didi

php - Luracast ReSTLer : "Naming" returned objects

转载 作者:行者123 更新时间:2023-12-04 06:10:32 25 4
gpt4 key购买 nike

我正在使用漂亮的 ReSTLer REST 框架将数据库中的一些资源公开给各种客户端。

现在当从服务返回结果时,格式有点像这样(我在这里使用 ReSTLer 网站自己的示例作为基础):

[
{
"id": 1,
"name": "Jac Wright",
"email": "jacwright@gmail.com"
}
]

或者在 XML 中:
<?xml version="1.0"?>
<response>
<item>
<id>1</id>
<name>Jac Wright</name>
<email>jacwright@gmail.com</email>
<item>
</response>

有点让我烦恼的是,在 JSON 中,结构是匿名的(如果这是在这里使用的正确术语?),而在 XML 中,对象被包装在“项目”标签中。我希望看到由资源类型名称包装的返回结构。像这样:
[
"author": {
"id": 1,
"name": "Jac Wright",
"email": "jacwright@gmail.com"
}
]


<?xml version="1.0"?>
<response>
<author>
<id>1</id>
<name>Jac Wright</name>
<email>jacwright@gmail.com</email>
<author>
</response>

如果我还没有完全理解相关代码,那么在不修改 ReSTLer 本身的情况下这完全可能吗?

最佳答案

example you have pointed out 返回以下内容

return array(
array('id'=>1, 'name'=>'Jac Wright', 'email'=>'jacwright@gmail.com'),
array('id'=>2, 'name'=>'Arul Kumaran', 'email'=>'arul@luracast.com' ),
);

我们需要做的就是将单个数组包装在另一个数组中的键“作者”下。例如在 author.php
<?php
class Author {
function post ($request_data){
print_r($request_data);
return $request_data;
}
function get() {
return array('author'=> array(
array('id'=>1, 'name'=>'Jac Wright1', 'email'=>'jacwright@gmail.com'),
array('id'=>2, 'name'=>'Arul Kumaran3','email'=>'arul@luracast.com')
));
}
}

这将获得您想要的确切结果 json xml

作者.xml:
<?xml version="1.0"?>
<response>
<author>
<id>1</id>
<name>Jac Wright1</name>
<email>jacwright@gmail.com</email>
</author>
<author>
<id>2</id>
<name>Arul Kumaran3</name>
<email>arul@luracast.com</email>
</author>
</response>

作者.json:
{
"author": [
{
"id": 1,
"name": "Jac Wright1",
"email": "jacwright@gmail.com"
},
{
"id": 2,
"name": "Arul Kumaran3",
"email": "arul@luracast.com"
}
]
}

让我解释一下我使用的技术,我使用了上面的post方法并发布了确切的 xml我想要和使用的结构 print_r找到对应的 php结构体 :)

这是我在命令行中尝试的 cURL
curl -X POST http://restler2.dev/test/naming_returned/author.xml -H "Content-Type: text/xml" -d '<response><author><id>1</id><name>Jac Wright</name><email>jacwright@gmail.com</email></author><author><id>1</id><name>Jac Wright</name><email>jacwright@gmail.com</email></author></response>'

和回应
Array
(
[author] => Array
(
[0] => Array
(
[id] => 1
[name] => Jac Wright
[email] => jacwright@gmail.com
)

[1] => Array
(
[id] => 1
[name] => Jac Wright
[email] => jacwright@gmail.com
)

)

)
<?xml version="1.0"?>
<response>
<author>
<id>1</id>
<name>Jac Wright</name>
<email>jacwright@gmail.com</email>
</author>
<author>
<id>1</id>
<name>Jac Wright</name>
<email>jacwright@gmail.com</email>
</author>
</response>

为了完整起见,让我输入网关 index.php也在这里
<?php
require_once '../../restler/restler.php';

#set autoloader
#do not use spl_autoload_register with out parameter
#it will disable the autoloading of formats
spl_autoload_register('spl_autoload');

$r = new Restler();
$r->addAPIClass('Author');
$r->setSupportedFormats('JsonFormat','XmlFormat');
$r->handle();

关于php - Luracast ReSTLer : "Naming" returned objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com