2016-06-13 106 views
0

我正在使用Slim 3處理REST API項目,並且想知道是否有一種簡單的方法來實現下面的路由而不爲短路創建單獨的路由。如何將短距離路線映射到Slim 3中的同一控制器

簡寫爲../me../users/{id}其中id是當前用戶ID。 目前爲止,我只是創建了兩條路線,並將它們映射到相同的控制器方法;但也有許多更多端點,其使用相同的邏輯,例如: ../users/{id}/posts應該使用相同../me/posts../users/{id}/groups/{gid}應該使用作爲../me/groups/{gid}

我用雙點以指示有前述URI份(版本,語言等)。 我希望你現在明白了。

所以我的問題是這樣的:有沒有一種方法來重新路由這些請求,或者是有一種適合我需求的路由模式,我錯過了它,甚至我必須在中間件中擺弄才能實現這一點?

感謝

+0

把ID放在一個會話中,然後當你把我作爲一個變量,你知道了嗎? – nerdlyist

+0

多數民衆贊成那不是如何REST工作 – zedling

+0

啊是的抱歉解決路線不是問題。這就是我在會議期間撿到的東西。 – nerdlyist

回答

1

的公報文件有一種方式,採取修身的FastRoute路由器的優勢。將一個正則表達式到路線的可變部分,並做了額外的解析控制器內部:

$app->get('/whatever/{id:users/\d+|me}', function ($request, $response, $args) { 
    if (preg_match('%^users/(\d+)$%', $args['id'], $parsed)) { 
     // This is /users/{id} route: 
     $user = $parsed[1]; 
    } else { 
     // This is /me route: 
     $user = 'automagically recognized user'; 
    } 
    return $response->withStatus(200)->write('Hello '.$user); 
}); 

但是我發現奇怪的,並建議映射相同的控制器,以兩個獨立的路線,因爲你現在做的。我想到兩個原因:

  • 您可以將「我」路由的用戶標識僅查找到需要的路徑(通過讓另一個控制器將此邏輯添加到主路徑的頂部)。
  • 團隊中的其他開發人員更容易理解。

希望它有幫助!

相關問題