如何在slim框架中使用相同的路由url进行多个操作

时间:2016-03-01 12:38:59

标签: php slim

我正在使用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"}]

如何解决?

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条件

分隔您的代码