昨天簡介完RESTful API,今天就可以來做API了。
最基本的 Laravel 路由是一個 URI 和一個閉包
,是以一個非常簡單且直覺的方式來定義路由:
Route::get('foo', function () {
return 'Hello World';
});
routes 目錄中的路由檔案定義了所有的 Laravel 路由。這些檔案會自動被框架載入。routes/web.php
定義網頁介面的路由。這些路由被分配到 web
中介層群組,提供像是 session 狀態和 CSRF 保護的特性。routes/api.php
中的路由是無狀態的,且被分配到 api
中介層群組。
對大部分的應用程式來說,你會先由在 routes/web.php
檔案中定義路由開始。routes/web.php
中定義的路由可以透過在瀏覽器中輸入已定義的路由 URL 來訪問。例如,你可以在瀏覽器中瀏覽 http://your-app.dev/user
來訪問以下路由:
Route::get('/user', 'UsersController@index');
routes/api.php
檔案中定義的路由會透過 RouteServiceProvider
被巢狀在一個路由群組中。群組中的路由會自動被加上 /api
前綴,因此你不需要手動在檔案中的每個路由做設定。可以藉由修改 RouteServiceProvider
類別來調整前綴及其他路由群組選項。
路由器能讓你註冊回應任何 HTTP request 的路由:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
有時候你可能需要註冊一個回應多種 HTTP request 的路由。你可以使用 match
方法做到。甚至可以透過 any
方法來註冊回應所有 HTTP request 的路由:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
有時候你可能需要從 URI 中取得一些字段。例如,你可能需要從 URL 取得使用者的 ID。你可以透過定義路由參數來取得:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
你可以依照路由需要,定義任何數量的路由參數:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
路由的參數都會被放在 {} 大括號內,只由字母組成,且不包含 - 字元。使用 _ 來取代 -。路由參數根據它們的順序被注入到路由回呼或控制器中 - 回呼或控制器中的參數名稱不會有任何影響。
有時候你可能需要指定路由參數,但是讓路由參數的存在是選擇性的。你可以藉由在參數名稱後面加上 ? 達成。記得給該路由的對應參數一個預設值:
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});