Laravel - 18. アクション - リダイレクト

引き続きコントローラのアクションメソッドについて学習してきます。前節ではレスポンスについて学習したので、ここではリダイレクトする方法について見ていくことにします。

Laravelのアクションメソッドにおいて、リダイレクトするレスポンスを返却するには redirect 関数を使います。ここでは、テキストエディタで app/Http/Controllers/HelloController.php を開いて store アクションを修正し、リダイレクトするように変更してみましょう。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Message;
use App\Http\Requests\MessageRequest;

class HelloController extends Controller
{
    public function index()
    {
        $title = "Hello Model!";
        $messages = Message::orderBy("id")->get();
        return view("hello/index", compact("title", "messages"));
    }

    public function create()
    {
        return view("hello/create");
    }

    public function store(MessageRequest $request)
    {
        $text = $request->input("text");
        $all = $request->all();
        $ua = $request->header("User-Agent");
        $path = $request->path();

        Log::debug("All:", $all);
        Log::debug("UA:" . $ua);
        Log::debug("Path:" . $path);

        return redirect("/hello");
    }
}

store アクションでは戻り値に redirect 関数の呼び出し結果を指定しています。 redirect 関数は第1引数にリダイレクト先のパスを指定します。ここでは "/hello" を指定しているので、リダイレクトすることによって HelloControllerindex アクションが呼び出されるようになります。

redirect 関数は第2引数にHTTPのステータスコードを設定できます。また with メソッドの呼び出しをチェーンすることで、後で学習するフラッシュメッセージを指定することもできます。

動作確認

HelloControllerstore アクションを修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。

$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000

続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。

http://localhost:8000/hello/create

入力フォームが表示されるので、メッセージを入力して送信ボタンをクリックします。

/hello にリダイレクトされることにより index アクションの結果が表示されるのがわかります。

まとめ

  • コントローラのアクションメソッドにおいてリダイレクトできる
  • redirect 関数の引数にリダイレクト先のURIやアクション名を指定する
  • リダイレクト時のHTTPのステータスコードを指定したり、セッションを使ったフラッシュメッセージを保持したりできる