MVC 中的 C,負責處理網頁任何邏輯程式的區塊,例如:註冊資料丟進資料庫、判斷帳號密碼是否正確,回傳資料等等……。
用下列指令生成一個 Controller,--resource
會幫你生成一些 Laravel 預設的方法,
也可已用--api
來生成 restful api 會用到的方法,我們止寫 api 舊只需要用--api
就好。
php artisan make:controller TestController --resource
or
php artisan make:controller TestController --api
現在可以在 TestController 看到 Laravel 自動生成的 class 以及預設的函式了,用下圖來解釋官方提供的用法。
當然路由還是要自己定義,不過其實 Laravel 已經提供了一個 Route 的方法一次建立所有預設路由,或是建立所有 restful api 用得到的路由。
use App\\Http\\Controllers\\TestController;
Route::resource('test', TestController::class);
Route::apiResource('test', TestController::class);
接下來在所有方法裡面隨便回傳一個字串看看效果。
public function index()
{
return response()->json("index", 200);
}
public function create()
{
return response()->json("create");
}
public function show($id) //參數一樣在這裡接收
{
return response()->json("show " . $id);
}
Response 是回應封包的物件,所以 API 都要用 Response 去回應要求,最常用的 Response 用法就是將資料用 json() 回傳,內容是一個 PHP 的陣列,=>
是用來定義 key 值的,不寫就是回傳陣列。
return response()->json(["aaa", "msg"=>111]);
有時候會看到response(["msg"=>111]);
的寫法,雖然一樣能抓到資料,但寫 API 還是建議用上面的方式,而這個方式是回傳 web 時使用,差別在於 Response 封包的 header 不一樣。參考資料
如果有需要回傳狀態碼,就可以這樣:
return response()->json(["error"=>"server error"], 500); //預設200
關於狀態碼的選擇可以參考: http 狀態碼甚至自定義 header 也可以: