記事の内容
概要
ユーザーを指定したURLやルートにリダイレクトするために使用します。
※セッションメッセージの設定可能
route
ユーザーを前のページにリダイレクトします。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Redirect;
class AuthController extends Controller
{
public function login(Request $request)
{
// ログイン処理(省略)
// ログイン成功後にダッシュボードへリダイレクト
return Redirect::route('dashboard')->with('status', 'ログインに成功しました');
}
}
back
ユーザーを前のページにリダイレクトします。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Http\Request;
use Exception;
class ContactFormController extends Controller
{
public function processSubmission(Request $request)
{
// トランザクションの開始
DB::beginTransaction();
try {
// バリデーション
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email',
'message' => 'required|string|max:1000',
]);
// 問い合わせデータをデータベースに保存
DB::table('contacts')->insert([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'message' => $validatedData['message'],
'created_at' => now(),
'updated_at' => now(),
]);
// ここまでの処理が成功したらコミット
DB::commit();
// 処理が成功したら、確認ページにリダイレクト
return Redirect::route('contact.thankyou')->with('status', 'お問い合わせありがとうございました');
} catch (Exception $e) {
// エラー発生時にロールバック
DB::rollBack();
// エラーメッセージを表示して前のページに戻る
return Redirect::back()->withErrors(['error' => '処理中にエラーが発生しました。もう一度お試しください。'])->withInput();
}
}
}
to
指定した URLやパス にユーザーをリダイレクトします。
※外部URLにも簡単にリダイレクト可能
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Redirect;
class PageController extends Controller
{
public function redirectToAbout()
{
// 'about' ページへリダイレクト
return Redirect::to('/about')->with('status', 'リダイレクトしました');
}
public function redirectToExternal()
{
// 外部サイトへリダイレクト
return Redirect::to('https://example.com');
}
}
refresh
現在のページをリフレッシュ(再読み込み)します。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Redirect;
class ProfileController extends Controller
{
public function updateProfile(Request $request)
{
// プロフィール更新処理(省略)
// ...
// 処理が成功したらページをリフレッシュ
return Redirect::refresh()->with('status', 'プロフィールを更新しました');
}
}
intended
ユーザーが認証などの理由でリダイレクトされた後、元のリクエスト先に戻します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* ユーザー認証の試行を処理
*/
public function authenticate(Request $request): RedirectResponse
{
// 入力されたメールアドレスとパスワードをバリデーション(確認)
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
// 認証を試みる
if (Auth::attempt($credentials)) {
// セッションを再生成してセキュリティを確保
$request->session()->regenerate();
// ログインが成功したら、ユーザーが元々アクセスしようとしていたページへリダイレクト
// 例: "/dashboard"
return redirect()->intended('dashboard');
}
// 認証が失敗した場合、エラーメッセージを表示し、元の入力フォームに戻す
return back()->withErrors([
'email' => '入力された資格情報は登録されていません。',
])->onlyInput('email'); // メールアドレスだけは保持して再入力の手間を省く
}
}
1.ログイン前に /profile
へアクセス
2.ログインページにリダイレクト
3.元のページ /profile
をセッションに保存
4.ユーザーがログインredirect()->intended()
で元のページにリダイレクト
5.元のページがない場合、dashboard
へ