我正在使用slim框架创建API。我遇到了以下问题。
我使用其中一个路径进行给定输入。也就是说,json输入:ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
From 192.168.1.1 icmp_seq=3 Destination Host Unreachable
From 192.168.1.1 icmp_seq=4 Destination Host Unreachable
From 192.168.1.1 icmp_seq=5 Destination Host Unreachable
From 192.168.1.1 icmp_seq=6 Destination Host Unreachable
。路线是
{ "tagname": "tname"}
现在,我想为另一个input.json:$app->post('/tag',function () use($app, $db){
//code
});
使用相同的路由。路线是
[{"tid": "1"},{"tid": "2"}]
如何解决?
答案 0 :(得分:1)
Slim的路由器无法根据收到的内容为同一路径调用不同的功能。
在您的特定情况下,在一条路线上处理两种不同类型的输入数据的最简单方法是这样的(我假设您将数据作为POST主体使用application/json
而不是由Slim2处理)
$app->post('/tag',function () use($app, $db){
$payload = json_decode(file_get_contents('php://input'));
if(is_array($payload)) {
// code to deal with [{"tid": "1"},{"tid": "2"}]
} else {
// code to deal with { "tagname": "tname"}
}
});
但更简单,更合乎逻辑的是,/tag
路由为单一,/tags
为多路。或者只需要将所有标签发送为阵列 - 甚至是单个标签。
答案 1 :(得分:0)
您可以传递额外参数以在同一路线中执行其他操作,并使用if条件
分隔您的代码