LoginSignup
4
3

More than 1 year has passed since last update.

【Laravel】よく使うリダイレクトのやり方2種類

Last updated at Posted at 2021-08-01

HTTPリダイレクト

リダイレクトレスポンスは、Illuminate\Http\RedirectResponseクラスのインスタンスで、ユーザーを他のURLへリダイレクトするために必要なしっかりとしたヘッダを含んでいる必要があります。RedirectResponseインスタンスを生成する方法はいくつかあります。

引用:HTTPリダイレクト

結論

通常のリダイレクト:redirectヘルパを使用する
前のページに戻るリダイレクト:backヘルパを使用する

1. redirectヘルパを使用する

Laravelではredirectヘルパ関数がグローバルに定義されており、アプリケーションのどこからでも使用できます。

// URLへのリダイレクト
return redirect('home/dashboard');

//名前付きルートへのリダイレクト
return redirect()->route('login');

//名前付きルートへのリダイレクト(パラメータ付き)
return redirect()->route('profile', ['id' => 1]);

// コントローラアクションへのリダイレクト
return redirect()->action('LoginController@login');

// コントローラアクションへのリダイレクト(パラメータ付き)
return redirect()->action('LoginController@login', ['id' => 1]);

// URLでへのリダイレクト(フラッシュメッセージ付き)
return redirect('home')->with('status', 'ログインしました!');

// bladeでこんな感じに描けばフラッシュメッセージを表示できる
@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif

2. backヘルパを使用する

backヘルパ関数もグローバルに定義されており、アプリケーションのどこからでも使用できます。

// 前の画面に戻る
return back();

// 前の画面に戻る(入力された値は保持する)
return back()->withInput();

// 前の画面に戻る(エラーを設定する)
return back()->withInput()->withErrors([
    'email' => '入力必須です。'
]);

// こんな書き方も見たことあるけど、古い書き方で現在は上記のbackヘルパを使う模様
return redirect()->back();

まとめ

2種類のヘルパを使って簡単にリダイレクトができました。

内部的にはどちらもreturnの後のヘルパでIlluminate\Http\RedirectResponseクラスのインスタンスを作成して返しています。

Illuminate\Http\RedirectResponseクラスのインスタンスはリダイレクト先のURLやHTTPのステータスコードを保持します。

redirectヘルパでは引数で指定したURLを、backヘルパでは前画面のURLをそれぞれ設定しているようなイメージでしょうか。

return back()について内部的に何が起こっているか確認する記事も投稿しているので、よろしければこちらも併せて確認いただければと思います。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3