Skip to main content

前言

Laravel 提供多個產生應用 URL 的 helper。 在樣板或 API 回應中建構連結、或產生導向應用其他位置的 redirect 回應時特別方便。

基本用法

產生 URL

url helper 產生任意 URL。 產生的 URL 會自動使用當前處理中請求的 scheme(HTTP 或 HTTPS)與 host。
要包含 query string 參數的 URL,使用 query 方法。
若指定路徑中已存在的 query 參數,既有值會被覆寫。
也可以把陣列值當作 query 參數傳入。這些值會被適當地標鍵並編碼到產生的 URL 中。

取得目前 URL

若不對 url helper 指定路徑,會回傳 Illuminate\Routing\UrlGenerator 實例,可存取目前 URL 相關資訊。
這些方法也可透過 URL facade 存取。

取得前一個 URL

有時想知道使用者剛才所在的 URL。可用 url helper 的 previouspreviousPath 方法取得。
也可以透過 session 取得前一個 URL。
也能經 session 取得前一個訪問 URL 的路由名稱。

具名路由的 URL

route helper 用來產生 具名路由 的 URL。 使用具名路由可不依賴實際 URL 產生 URL。 因此路由的 URL 變更時,route 呼叫不需修改。
產生此路由的 URL 如下:
也支援有多個參數的路由。
未對應路由定義參數的多餘陣列元素會加到 URL 的 query string。

Eloquent model

常會用 Eloquent model 的路由 key(通常是主鍵)產生 URL。 可將 Eloquent model 作為參數值傳入。route helper 會自動取出 model 的路由 key。

簽章 URL

Laravel 可簡單為具名路由建立「簽章」URL。 這些 URL 會在 query string 附加「簽章」雜湊,Laravel 可驗證 URL 建立後未被竄改。 簽章 URL 特別適用於需公開存取但需防止 URL 操作的路由。 例如可用簽章 URL 為寄給客戶的 email 實作公開「取消訂閱」連結。 用 URL facade 的 signedRoute 方法建立簽章 URL。
signedRoute 指定 absolute 引數,可將簽章 URL 雜湊排除 domain。
要產生指定時間後失效的暫時簽章 URL,使用 temporarySignedRoute。 Laravel 在驗證暫時簽章 URL 時,會確認編碼於簽章 URL 中的到期時間戳未過期。

簽章 URL 的驗證流程

簽章路由請求的驗證

要確認收到的請求含有有效簽章,可對 Illuminate\Http\Request 實例呼叫 hasValidSignature
要在驗證時忽略特定 query 參數,使用 hasValidSignatureWhileIgnoring
除了使用收到的請求實例外,也可將 signedIlluminate\Routing\Middleware\ValidateSignaturemiddleware 指派到路由。 若收到的請求無有效簽章,middleware 會自動回傳 403 HTTP 回應。
若簽章 URL 不含 domain,可對 middleware 指定 relative 引數。

對無效簽章路由的回應

存取已過期的簽章 URL 時,會顯示 403 HTTP 狀態碼的通用錯誤頁。 可在應用的 bootstrap/app.php 定義 InvalidSignatureException 例外的自訂「render」closure 來自訂此行為。

Controller Action 的 URL

action 函式產生指定 controller action 的 URL。
若 controller 方法接受路由參數,在函式第 2 個引數傳入路由參數的關聯陣列。

Fluent URI 物件

Laravel 的 URI 類別提供便利的 fluent 介面來透過物件建立與操作 URI。
取得 URI 實例後可 fluent 地變更。

預設 URL 參數

有時要為特定 URL 參數指定整個請求範圍的預設值。 例如多條路由都有定義 {locale} 參數。
每次呼叫 route helper 都要傳 locale 很麻煩。 此時可用 URL::defaults 方法定義此參數在當前請求中常用的預設值。 在路由 middleware 中呼叫此方法就能存取當前請求。
設定 locale 參數的預設值後,用 route helper 產生 URL 時不需再傳入該值。
URL 預設值設定可能會妨礙 Laravel 的隱式 model binding 處理。 請以middleware 優先順序設定讓設定 URL 預設值的 middleware 在 Laravel 本身的 SubstituteBindings middleware 之前執行。 可在應用的 bootstrap/app.php 使用 priority middleware 方法設定。
最後修改於 2026年8月2日