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"
を指定しているので、リダイレクトすることによって HelloController
の index
アクションが呼び出されるようになります。
redirect
関数は第2引数にHTTPのステータスコードを設定できます。またwith
メソッドの呼び出しをチェーンすることで、後で学習するフラッシュメッセージを指定することもできます。
動作確認
HelloController
の store
アクションを修正したので、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のステータスコードを指定したり、セッションを使ったフラッシュメッセージを保持したりできる