前言
Laravel 提供多個產生應用 URL 的 helper。 在樣板或 API 回應中建構連結、或產生導向應用其他位置的 redirect 回應時特別方便。基本用法
產生 URL
用url helper 產生任意 URL。
產生的 URL 會自動使用當前處理中請求的 scheme(HTTP 或 HTTPS)與 host。
query 方法。
取得目前 URL
若不對url helper 指定路徑,會回傳 Illuminate\Routing\UrlGenerator 實例,可存取目前 URL 相關資訊。
URL facade 存取。
取得前一個 URL
有時想知道使用者剛才所在的 URL。可用url helper 的 previous 或 previousPath 方法取得。
具名路由的 URL
route helper 用來產生 具名路由 的 URL。
使用具名路由可不依賴實際 URL 產生 URL。
因此路由的 URL 變更時,route 呼叫不需修改。
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。
temporarySignedRoute。
Laravel 在驗證暫時簽章 URL 時,會確認編碼於簽章 URL 中的到期時間戳未過期。
簽章 URL 的驗證流程
簽章路由請求的驗證
要確認收到的請求含有有效簽章,可對Illuminate\Http\Request 實例呼叫 hasValidSignature。
hasValidSignatureWhileIgnoring。
signed(Illuminate\Routing\Middleware\ValidateSignature)middleware 指派到路由。
若收到的請求無有效簽章,middleware 會自動回傳 403 HTTP 回應。
relative 引數。
對無效簽章路由的回應
存取已過期的簽章 URL 時,會顯示403 HTTP 狀態碼的通用錯誤頁。
可在應用的 bootstrap/app.php 定義 InvalidSignatureException 例外的自訂「render」closure 來自訂此行為。
Controller Action 的 URL
action 函式產生指定 controller action 的 URL。
Fluent URI 物件
Laravel 的 URI 類別提供便利的 fluent 介面來透過物件建立與操作 URI。預設 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 方法設定。