SLIM可选参数问题

时间:2013-08-31 16:05:52

标签: php restful-url slim

我试图在Slim PHP中实现类似的功能:

  

页/ P1 / P2 / P3 / P4

我想要如果我从右边(显然)省略了参数,那么我想根据我收到的任何参数来做我的东西。

    $app->get('/page(/)(:p1/?)(:p2/?)(:p3/?)(:p4/?)', 
        function ($p1 = null, $p2 = null, $p3 = null, $p4 = null) {
            print empty($p1)? : '' . "p1: $p1/<br/>";
            print empty($p2)? : '' . "p2: $p2/<br/>";
            print empty($p3)? : '' . "p3: $p3/<br/>";
            print empty($p4)? : '' . "id: $p4<br/>";
    });

一切都按预期工作但问题是每当我从末尾删除一个参数时,它会为我删除的每个参数打印1。 它为什么这样做? 我在这做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您省略了三元的第二部分(如果test语句返回true,应该打印什么),则ternary语句返回测试表达式求值的内容。然后打印出该结果。

当您省略路线中的最后一个参数时,测试表达式会产生true,但由于您未定义在这种情况下要执行的操作,因此会返回true1打印出来。

请改为尝试:

$app->get('/page(/)(:p1/?)(:p2/?)(:p3/?)(:p4/?)', 
    function ($p1 = null, $p2 = null, $p3 = null, $p4 = null) {
        print empty($p1)? "" : '' . "p1: $p1/<br/>";
        print empty($p2)? "" : '' . "p2: $p2/<br/>";
        print empty($p3)? "" : '' . "p3: $p3/<br/>";
        print empty($p4)? "" : '' . "id: $p4<br/>";
});

现在脚本知道如果其中一个empty()表达式返回true,该怎么做 - 打印一个空字符串。