iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0

上回提到Laravel架構中有個目錄叫routes,是路由的家。今天要來了解的是Laravel中的Route定義:)

打開web.php可以看到:

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

這是最簡單的路由定義,由一個URL跟一個閉包組成,意思是當我們連到 http://yourdomain/ 時,會回傳 welcome.blade.php 的內容,這個檔案可以在 resources/views 資料夾中找到。

顯示View的路由也可以這樣定義:

Route::view('/welcome', 'welcome');

兩者效果一樣,不過後者的語法簡便許多。除了GET之外,Laravel也有提供其他類型的路由定義:

Route::post('/', function () {});
Route::put('/', function () {});
Route::delete('/', function () {});
Route::any('/', function () {});
Route::match(['get', 'post'], '/', function () {})
.
.
.

其中match是可以註冊回應多種HTTP動詞的路由,any則是可以註冊回應所有HTTP動詞的路由。

HTTP定義了一組可以分配指定資源跟執行指定動作的請求方法,這些請求方法也可以稱為HTTP動詞。

當然也不是只能放View,路由也可以回傳字串:

Route::get('/Hi', function () {
    return 'Hello, world';
});

酷!(星星眼

有時候我們會需要一些參數去顯示對應的畫面,比如我們要從URL去取得參數時:

Route::get('user/{name}', function ($name) {
    return 'Hello, '.$name;
});


但這種用法你會發現,如果 /user/後面沒有接任何字串,頁面就會顯示404。另外有個方法可以解決,選擇性參數。在參數後面加上?,並設定參數的預設值,如下:

Route::get('user/{name?}', function ($name='Anonymous') {
    return 'Hello, '.$name;
});

這裡也提一下Laravel內建的CSRF保護機制。每個指向web定義的POST、PUT、DELETE路由都要包含一個CSRF token,中介層會驗證token是否與session中存的一致,確保不會發生CSRF攻擊。

// 原生PHP
<?php echo csrf_field(); ?>

// Blade模板
{{ csrf_field() }}

兩者其實是一樣的意思,在Blade模板中,這個函式會自動生成完整HTML語法,隱藏在文件中。

<!--原生用法-->
<form method="POST" action="/profile">
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    
    ...
    
</form>

<!--Blade模板用法-->
<form method="POST" action="/profile">
    {{ csrf_field() }}
    
    ...
    
</form>

相關資料:讓我們來談談 CSRF | TechBridge 技術共筆部落格

小結語

不只是上面提到的基本路由,還有路由群組、路由模型,但大概就是經驗差距,光是看文件無法連結到這可以做什麼、用在哪裡。現階段只能先記著有這樣的功能,或許哪天有機會就用上了:)


上一篇
D3 今天看看資料夾s
下一篇
D5 Blade是什麼?可以吃嗎OqO
系列文
來用Laravel做點什麼吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言