SLIM可选参数问题


SLIM Optional Parameter Issue

我试图在Slim PHP:中实现这样的功能

第/p1/p2/p3/p4页

我希望如果我忽略了右边的params(显然),那么我想根据我收到的任何params来做我的事情。

    $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。它为什么这么做?我在这里做错了什么?

由于省略了三进制的第二部分(如果测试语句返回true,则应打印内容),因此三进制语句返回测试表达式的计算结果。然后打印出该结果。

当您省略路由中的最后一个参数时,测试表达式将结果为true,但由于您没有定义在这种情况下要做什么,因此会返回true并打印出1

试试这个:

$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该怎么办——打印一个空字符串。