路由參數

用法為

Route::get('/user/{id}/', function ($id){} );

可以使用多個參數,像是

Route::get('/user/{id}/comments/{commentId}', function (
    $theActualUserId,//對應{id}
    $theActualCommentId//對應{commentId}
){} );

其匹配的方式為順序,所以可以使用不同名稱。

但是建議使用相同名稱如下:

Route::get('/user/{id}/comments/{commentId}', function (
    $id,
    $commentId
){
    //...
});

選用

如果參數後面加上問號,會變成選用。
這時候對應變數必須要加上一個預設值,不然邏輯會有錯誤。

Route::get('/user/{id?}/', function ($id= 'default'){
    //前面沒有預設值的話,這裡面的$id就不知道是多少了
});

正規表示

可以使用正規表示來對路由參數進行限制

Route::get('/user/{id}/', function ($id){
})->where('id', '[0-9]+');

Route::get('/user/{username}/', function ($username){
})->where('username', '[A-Za-z]+');

Route::get('/post/{id}/{slug}', function ($id, $slug){

})->where(['id'=>'[0-9]+', 'slug'=>'[A-Za-z]+']);//用陣列處理

由上往下進行匹配,如果全部條件均不符合,回傳 404 錯誤。

自我複習

  • 一般使用

    • Route::get('/user/{id}/comments/{commentId}', function (

      $id,  
      $commentId
      

      ){
      });

  • 使用問號

    • Route::get('/user/{id?}/', function ($id= 'default'){ });
  • 正則處理(一個或多個)
    • Route::get('/user/{id}/', function ($id){ })->where('id', '[0-9]+');
    • Route::get('/post/{id}/{slug}', function ($id, $slug){ })->where(['id'=>'[0-9]+', 'slug'=>'[A-Za-z]+']);

results matching ""

    No results matching ""