2014-03-26 39 views
1

我使用Laravel構建了一個RESTful API。我很困惑如何做路由。具有多個可選參數的Laravel路線

我有以下API控制器

class APIController extends BaseController{ 

    public function sendMsg($authid, $roomid, $msg){ 

    } 

    public function getMsg($roomid, $timestamp){ 

    } 
} 

的URL格式我想這是訪問看起來像這樣: http://example.com/api/{functionName}/{parameter1}/{parameter2}/.../

在這裏,第一個參數,我將有功能名稱應該映射到控制器類中的功能,並且跟隨控制器所需的參數。

例如
要訪問sendMsg()功能,URL應該是這樣的:
http://example.com/api/sendMsg/sdf879s8/2/hi+there+whats+up

要訪問getMsg()功能,URL應該像 http://example.com/api/getMsg/2/1395796678


所以...我怎麼寫我的路線,以便它可以處理動態數字和不同的參數需要?

我可以寫爲每個功能名稱的一個途徑,像這樣:

Route::get('/api/sendmsg/{authid}/{msg}', function($authid, $msg){ 
    //call function... 
}); 

和同爲其他功能。這個如果很好,但是是否有一種方法可以將所有功能與APIController結合在一個路徑中?

回答

2

是的,你可以將所有的功能在一個路徑使用resourceful controller這是最適合建立一個API結合您的APIController

Route::resource('api' ,'APIController'); 

但是,從技術上講,它不是一個路線可言,代替Laravel爲每個函數生成多個routes,要檢查路由,可以從命令提示符/終端運行php artisan routes命令。

要創建一個resourceful controller即可從命令行運行下面的命令:

php artisan controller:make APIController 

這會創建一個6個功能(骨架/結構只),並且每個功能的控制器將被映射到一個HTTP動詞。這意味着,根據請求類型(GET/POST等),函數將被調用。例如,如果使用請求使用http://domain.com/api進行請求,則將調用getIndex方法。

public function getIndex() 
{ 
    // ... 
} 

您應該檢查文檔以深入瞭解正確理解。這被稱爲RESTful api。

+0

你的答案很有趣,但它不回答我的問題,我的問題是如何將未定義的一組參數映射到函數。像function1需要3個參數,而function2需要5個參數。我怎麼做? – Krimson

+0

你可以使用'api/{param1?}/{param2?}'這些將是可選的,你的函數必須爲每個參數使用默認值,比如'function f($ p1 = null,$ p2 = null)'你要求什麼? –

+0

那麼,這可能會工作,但說如果我有4個功能,每個有4個獨特的參數,那將是16個參數!也許我之前並不清楚,是否有一個函數可以獲取關聯數組中的所有參數或沿着這些行的某個參數? – Krimson