iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 9
1

本系列文的環境狀態,可點擊此連結後花園環境參考

可以告訴我,如何才能找到你嗎?
你的位置在哪裡?是否存在著?
再見到你之前,有什麼考驗等著我?

路由就像是地址一樣,辨識需要傳送的位置在哪,以及需要使用的方式,有些是公開的,任何人都可前往,有些則需要再經過驗證,才能到某些特別的地方。

Routes資料夾內放的幾個不同的檔案功能

  • api.php :當做前後端分離專案的時候,會用到這個檔案
  • channels.php:跟 Broadcast 有關係,是 laravel 的功能,較少使用。
  • console.php:跟指令相關,有時會打 php artisan xxx ,這個檔案就是和此部份相關。
  • web.php:一般在瀏覽器上打的 url,後面那個 domain name 之後接的字串,可以定義哪些字串要導向到哪個流程與畫面。

基礎路由

Route透過連線方法,一個 url 和一個 Closure (閉包),提供一個非常簡單且直覺的方式來定義路由

Route::get('foo', function () {
    return 'Hello World';
});

常見的路由方法:

方法 用途
GET 取得資源,檢視
POST 新增一筆資源
PUT 更新一筆資源
DELETE 刪除一筆資源

路由參數

必要參數

有時可能需要從 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 = 'Joker') {
    return $name;
});

路由別名

替路由建立識別名稱,增加識別性,並利於產生網址或重新導向。
可以透過 name 連結爲路由定義加上名稱:

Route::get('user/profile', function () {
    //
})->name('profile');

爲控制器做指定路由名稱:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

生成 url 到命名路由,給定路由名稱後,可在使用全域的 route 時,產生 url 或重新導向時的路由名稱

// 產生 URL...
$url = route('profile');

// 產生重新導向...
return redirect()->route('profile');

如果有定義參數,可以把參數傳給 route 的第二個參數,提供的參數會自動插入到 url 中正確的位置:

Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

路由群組

路由前綴(prefix)

prefix可以用來為群組中的每個路由加上 URI 前綴。例如,想在群組中所有的路由 URI 都加上 flower 前綴:

Route::prefix('flower')->group(function () {
    Route::get('users', function () {
        // 符合 「/flower/users」 URL
    });
});

中介層(middleware)

指定中介層到群組內例的路由,可以群組之前使用的中介方法,會依照陣列中的順序執行:

Route::middleware(['one', 'two'])->group(function () {
    Route::get('/', function () {
        // 使用 one 和 two 中介層
    });

    Route::get('user/profile', function () {
        // 使用 one 和 two 中介層
    });
});

查看路由表

當專案的路由越來越多時,我們可以在 terminal 使用 artisan 指令,查看目前所有路由定義的請求方法、網址、別名、執行內容與中介層。

在terminal輸入下列另一指令,都可執行查詢路由表

$ php artisan route:list
$ php artisan r:l

想更詳細瞭解,可參考下列連結
❁ Laravel官網-Routing
❁ Laravel道場-路由
❁ 初心者之路#05 – Laravel Routing 路由控制
❁ 深入淺出 Laravel 路由執行原理
❁ Laravel 原碼閱讀指南 - 路由
❁ Laravel HTTP 基礎 Route
❁ Laravel 學習筆記(11) - Route 進階


上一篇
✾後花園D8✾-Laravel的角色設定(資料夾概略介紹)
下一篇
✾後花園D10✾-總要有個攻略路線(網址路由規劃)
系列文
在後花園遇見LP,Laravel及PHP的甜蜜糾纏,火熱上映49

尚未有邦友留言

立即登入留言