Redirect

記事の内容

概要

ユーザーを指定したURLやルートにリダイレクトするために使用します。
※セッションメッセージの設定可能

route

ユーザーを前のページにリダイレクトします。

name : リダイレクト先の名前付きルート
parameters : 名前付きルートに必要なパラメータ(省略可)
status : HTTPステータスコード(デフォルトは302)

<?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

記事の内容
閉じる