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

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 也可以:

Request