Laravel 把 routes 分成4類,分別是 api、channels、console、web

api 與 web 就是定義 API 與前端頁面的路由,channels 是定義 WebSocket 廣播的路由,console 則是用在自定義 artisan 指令。

Untitled

可以在 command line 輸入 console 預設就有的範例試試看php artisan inspire

回來看到這次的主題 api routes,請看下列的範例:

Route::get('/test', function (Request $request) {
    return response()->json("Hi");
});

這時候在瀏覽器輸入 http://127.0.0.1:8000/api/test 就可以看到 Laravel 回傳的資料了,要注意的是雖然路由指定義的是'/test',但定義在 api 檔裡的路由都會在前面加上/api變成/api/test

在這個範例中定義了有 http 方法 (get)、路由 ('/test') 以及一個函式,以下一一講解。

  1. http 方法

    Untitled

  2. 路由

    最簡單的路由就是'/'或是'/test'這樣,或者也可以不要斜線開頭'test',還可以在路由上用{}帶參數,例如:

    Route::get('/test/{name}', function (Request $request, $name) {
        return response()->json(["msg" => "Hi" . $name], 200);
    });
    
    // 甚至是
    
    Route::get('/test/{name}/with/{msg}', function (Request $request, $n, $m) {
        return response()->json(["msg" => "Hi ".$n.", ". $m], 200);
    });
    

    {}的位置就可以放入參數,函式的部分就用同參數名稱的變數作為參數,就能讀取值了。

  3. 函式

    在上述範例中,都是直接寫函式在 Route 裡,但是實作上都是導到 Controller 裡的函式,所以來修改一下寫法吧

    use App\\Http\\Controllers\\TestController;
    
    Route::get('/test', [TestController::class, 'index']);
    

    這樣就成功導到 UserController 裡的 index 函式了,如果有很多 API 都要導到同一個 Controller 的話還可以用這個寫法。

    use App\\Http\\Controllers\\TestController;
    
    Route::controller(TestController::class)->group(function () {
        Route::get('/test', 'index');
        Route::get('/test/{id}', 'show');
        Route::post('/test', 'store');
    });
    
  4. 常用指令

    php artisan route:list
    

關於 controller 就在下一篇介紹吧!