2013-08-31 43 views
0

我想實現修身PHP是這樣的:SLIM可選參數問題

頁/ P1/P2/P3/P4

我想,如果我從右側離開OUT參數, (顯然)然後我想根據我收到的任何參數來做我的東西。

$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/>"; 
    }); 

一切正常,但問題是,每當我從末尾移除設置了一個param,它打印1爲每PARAM我刪除。 它爲什麼這樣做? 我在這裏做錯了什麼?

回答

1

由於您省略了三元的第二部分(如果測試語句返回true,應該打印什麼),三元語句返回測試表達式的計算結果。然後打印出結果。

如果省略路由中的最後一個參數,測試表達式結果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 - 打印一個空字符串。