iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
3
自我挑戰組

Laravel 實戰經驗分享系列 第 8

Laravel 實戰經驗分享 - Day8 初探 Laravel - Route 路由設定

到了第八天,今天來講 Laravel Route (路由)的設定,Laravel 這個框架提供了完整的 MVC 架構,也可用相當方便的語法來實現 RESTful API,而這一切都可以透過 Route 來完成。
今天下班後想說回家趕稿,但是明華園天字團竟然在住處門口演出 XDDDDDD,我得趕快寫完去看歌仔戲囉~~

基本使用

路由的概念可以想像成提供你的程式一個路徑,引導它傳送資訊到這確的地方。Laravel Route 的設計即是將真實的檔案路徑隱藏起來,若是寫過純 PHP 的開發者應該不陌生,過去如果沒有特別進行 Route 的設計,你的專案目錄及結構就會暴露在 URL 當中,而 Laravel 的 Route 可以將你的請求導到某個 function 中,非常的方便。

Route 的設定檔在 routes/ 目錄內,可以參考一下我在 Day4 裡目錄結構的說明,一般的網站開發來說,我們大多使用 web.phpapi.php 這兩個檔案就可以完成 Route 的設定囉!
我們這邊以 web.php 這個檔案設定為例,至於 api.php,我們留著等之後講 RESTful API 時再詳細說明。

程式碼:

Route::get('/', function () {
    return view('welcome');
});

以這個範例來說,你的網址 example.com 後面若是沒帶任何參數,就會被導向 welcome 這個頁面,因為 '/' 代表的是整個網址的 root,後面則用 callback 的方式寫入函數,描述你進入到這個 Route 後要做的事情。
Route:: 後面則是設定你的 HTTP 請求方法,通常會有 getpostput/patchdelete 等方式,RESTful API 規範了這些方法的用途,之後會在寫成一篇告訴大家。
你也可以設定不同的網址名稱,例如:

Route::get('/welcome', function () {
    return view('welcome');
});

這樣當你的網址變成 example.com/welcome 時才會被導到 welcome 這個頁面。

將 Route 導到 Controller 程式碼的函數裡面

這個用法也其實很簡單,在上面的範例,我們是使用 callback 的方式直接將 Route 要做的事情寫在後面,但是這樣當我們要處理的事情越來越多,整個程式碼會越來越長,最後導致難以維護。
因此 Laravel 這邊提供了 Controller,讓你將 Route 導到 function 中直接進行你要做的事情。
程式碼範例如下 (Laravel 8 前)

Route::get('/product', 'ProductController@list');

原本後面應該被寫成 function 的部分改為 'ProductController@list'ProductController 指的是 Controller 的名字,list 則是寫在 ProductController 裡面的 function 名稱。
而這個 Route 的寫法在今年 9 月 Laravel 8 推出後,有了修改,上面的範例程式被改寫成下方的樣子:

Route::get('product', [ProductController::class, 'list'])

這個寫法我認為對開發者來說更友善,因為 ProductController 實際上來說的確就是一個 class,因此 Laravel 8 的寫法更直觀,如果你剛好是使用最新版的 Laravel 進行開發,請特別注意喔!

為 Route 命名 (Naming)

另外,Laravel 官方也建議開發者能使用以下方式為路由命名。

Route::get('product', [ProductController::class, 'list'])->name('product');

為路由命名能夠幫助你更方便產生網址或導向到特定路由,如下所示。

// 取得 URLs
$url = route('product');

// 導向
return redirect()->route('product');

除此之外,我曾經接手過某個專案,並沒有為每個路由命名,程式裡面有用到 URL,都被直接寫死,結果之後當客戶更改需求,我需要修改 URL 時就噴錯誤,找了好久才找到問題,因此多善用 Naming,之後要更改也方便很多。


明天我們繼續講 Controller,大家再見,我要去看歌仔戲了XDDDDDDDD


上一篇
Laravel 實戰經驗分享 - Day7 初探 Laravel - 如何規劃資料庫關聯
下一篇
Laravel 實戰經驗分享 - Day9 初探 Laravel - Controller 控制器
系列文
Laravel 實戰經驗分享30

尚未有邦友留言

立即登入留言