1. 程式人生 > >Laravel5 中的 redirect()

Laravel5 中的 redirect()

Laravel5 中新增了一個函式 redirect() 來代替 Laravel4 中 Redirect::to() 來進行重定向操作。函式 redirect() 可以將使用者重定向到不同的頁面或動作,同時可以選擇是否帶資料進行重定向。

  重定向響應是Illuminate\Http\RedirectResponse類的例項,其中包含了必須的頭資訊將使用者重定向到另一個URL。輔助函式redirect返回的就是RedirectResponse類的例項。

  示例路由:

Route::get('testRedirect', '[email protected]');

  示例動作:

public function testRedirect()
{
    // 以下示例程式碼為此處實現
}

1|0簡單的重定向

  假設我們當前的域名為:http://localhost

return redirect('home');

  重定向到 http://localhost/home

return redirect('auth/login');

  重定向到 http://localhost/auth/login

return redirect('');

  重定向到 http://localhost,注意此處傳入的是一個空字串,而不是什麼都不傳,上文已說 redirect() 返回Illuminate\Http\RedirectResponse類例項。

2|0連結方法的重定向

return redirect()->back();

  重定向到上一個 URL,需要注意死迴圈的問題。輔助函式back返回前一個 URL (使用該方法之前確保路由使用了web中介軟體組或者都使用了session中介軟體)。還有另外一種方式:

return back()->withInput();

3|0重定向到命名路由

// get('login', ['as' => 'userLogin', 'uses'=>'[email protected]']);
return redirect()->route('userLogin');

  重定向到命名為 userLogin 的路由。這種方式的使用更為靈活,因為我們將來要修改 URL 結構,只需要修改 routes.php 中路由的配置就行了。

// For a route with the following URI: profile/{id}
return redirect()->route('profile', [1]);

  如果路由中有引數,可以將其作為第二個引數傳遞到route方法。

return redirect()->route('profile', [$user]);

  如果要重定向到帶 ID 引數的路由(Eloquent 模型繫結),可以傳遞模型本身,ID 會被自動解析出來。

4|0重定向到控制器動作

return redirect()->action('[email protected]');

  只需簡單傳遞控制器和動作名到action方法即可。記住,你不需要指定控制器的完整名稱空間,因為 Laravel 的RouteServiceProvider將會自動設定預設的控制器名稱空間。

return redirect()->action('[email protected]', [1]);

  如果控制器路由要求引數,你可以將引數作為第二個引數傳遞給action方法。

5|0帶資料的重定向

  重定向到一個新的 URL 並將資料儲存到一次性 Session 中通常是同時完成的。

return redirect('dashboard')->with('status', 'Profile updated!');

  此程式碼會將資料新增到Flash會話快閃記憶體資料中,然後你可以在結果 Controller 或檢視中使用該資料:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif

  使用者重定向到新頁面之後,你可以從 Session 中取出顯示這些一次性資訊。

Reminder: Session Flash Data Laravel has a concept of Session Flash data for only one request – after the next is loaded, that Session element/value is deleted, and can’t be retrieved again. This is exactly what is happening in with() method – its purpose is to add an error message or some input data only for that particular redirect and only for one page. It does the same thing as a function Session::flash(‘error’, ‘Something went wrong.’).

  Laravel 只有一個請求會話Flash資料概念,在下一個請求被載入後,會話資料被刪除,並且無法再次檢索。

return redirect()->back()->withInput();

  此方法沒有引數,它的作用是將舊錶單值儲存到 Session 中。在新頁面你可以使用old獲取這些資料。