redirect 通常被稱為「轉址」或「重新導向」。
從 controller 方法或 route 定義回傳的資料中,最多的是 view,再來就是 redirect 。
在 Laravel 中,我們通常是用 redirect() 全域輔助函式或是 Redirect 靜態介面來完成這項工作,這兩種方式都會傳回 Illuminate\Http\RedirectResponse 的實例

RedirectResponse 常用的方法

to()

// 重導至路徑為 users/index 的位址
redirect()->to("users/index");

// 使用全域輔助捷徑,有同樣的效果
redirect("users/index");

// 使用靜態介面, 也有同樣的效果
Redirect::to("users/index"); 

// 靜態介面捷徑
Redirect("users/index");

method signature

function to($to = null, $status = 302, $header = [], $secure = null)

$to : 有效的內部路徑
$status 是 HTTP 狀態
$header 是需要一併傳送的 HTTP 標頭
$secure : http vs. https 的預設選項

route()

// 重導至路由名稱為 users.index 的位址
redirect()->route("users.index");```
method signature
function route($to = null, $parameters =[], $status = 302, $headers = [])

$to : 特定路由名稱
$parameters : 路由所需的參數

redirect()->route("users.index", ["keyword" => "lee"]);

back()

轉回上次用戶造訪的頁面

with()

在轉址的同時,將資料傳給 session

redirect("users.edit")->with("success", "update success");

配合 blade template 來顯示資訊
layouts/_message.blade.php

@foreach (['danger', 'warning', 'success', 'info'] as $msg)
  @if(session()->has($msg))
    <div class="flash-message">
      <p class="alert alert-{{ $msg }}">
        {{ session()->get($msg) }}
      </p>
    </div>
  @endif
@endforeach

withInput()

把表單輸入的資料傳給目標頁面

redirect("users.edit")
    ->withInput()
    ->with(["success" => "update success", "id" => 2]);
Last modified: 2024-05-23

Author

Comments

Write a Reply or Comment

Your email address will not be published.