Laravel5.6でResponseクラスの勉強してみた
こんにちわ、すももです。
日中はまだまだ暑いですが、夜はクーラーなしでも寝れる時期になりましたね〜
鈴虫の鳴き声を聞くと秋がくるなぁとしみじみ感じます。
さて、前回はRequestクラス
の勉強をしたので、今回はResponseクラス
の勉強をしてみました!
関連記事はこちら
Laravel5.6でRequestクラスの勉強してみた
一番シンプルなレスポンスの返し方
Laravelのレスポンスを返す方法で、一番シンプルなのはルートやコントローラから文字列を返す方法です。
例:/response
にアクセスがきたらレスポンスの勉強中!
を返す
Route::get('/response', function () {
return 'レスポンスの勉強中!';
});

わーい、表示されましたー!これは簡単ですね!
しかし実際はそんな単純なレスポンスを返すことはあまりないと思うので、他も見ていきましょう〜!
いろいろなリダイレクト
〜redirectヘルパの引数にリダイレクト先を入れるパターン〜
▼ユーザーを他のURLへ単純にリダイレクトさせたい場合は【redirectヘルパ】
例:/response
にアクセスがきたら/test
にリダイレクトする
Route::get('/response', function () {
return redirect('/test');
});
▼セッションにフラッシュデータを保存しつつリダイレクトしたい場合は【redirectヘルパ、からのメソッドチェーン】
例:/testflash
にリダイレクトしてセッションに保存した入力できたよ!
を画面に表示する
// ->with('フラッシュデータ名', '保存したい内容')
return redrect('/testflash')->with('status', '入力できたよ!');
// セッションに保存したフラッシュデータのメッセージを取り出して表示する
@if (session('status'))
<p>{{ session('status') }}</p>
@endif
〜redirectヘルパを引数なしで呼んで、Redirectorインスタンスのメソッドを使うパターン〜
▼名前付きルートにリダイレクトしたい場合は【routeメソッド】️
例:/response
にアクセスがきたら/test/aaa/bbb/ccc/ddd
にリダイレクトする
// ->name('名前付きルート名')
Route::get('/test/aaa/bbb/ccc/ddd', 'TestController@test')->name('test_input');
// routeメソッドの引数として('名前付きルート名')を渡す
Route::get('/response', function () {
return redirect()->route('test_input');
});
※もし、ルートにパラメーターがある場合は【routeメソッド】の第2引数として渡します!
例:/response
にアクセスがきたら/test/sumo
にリダイレクトする
// ->name('名前付きルート名')
Route::get('/test/{name}', 'TestController@test')->name('test_input');
// routeメソッドの引数として('名前付きルート名', ['パラメーター'])を渡す
Route::get('/response', function () {
return redirect()->route('test_input', ['name' => 'sumo']);
});
▼コントローラアクションにリダイレクトしたい場合は【actionメソッド】
例:TestController@test
にリダイレクトされる
// actionメソッドにコントローラとアクション名を渡す
return redirect()->action('TestController@test');
▼外部ドメインにリダイレクトしたい場合は【awayメソッド】
例:イノベーションエンジニアブログにリダイレクト
// ->away('外部ドメインのURL')
return redirect()->away('http://tech.innovation.co.jp/');
〜backヘルパ関数を使うパターン〜
▼フォーム入力情報にエラーがあった際、入力情報は残したまま元の画面を表示させたい場合は【backヘルパ関数】
例:名前の入力が空だった場合、メールアドレスの入力情報は残したまま元の画面を表示させる
// 名前とメールアドレスを送るフォームを準備
{{ Form::open(['url' => '/testregist', 'method' => 'post']) }}
<label>お名前:<input type="text" name="name"></label><br>
<label>メール:<input type="text" name="mail"></label><br>
<input type="submit" name="regist" value="登録する">
{{ Form::close() }}
// 名前が入力されているか確認
Route::post('/testregist', function (Request $request) {
if (empty($request->name)) {
return back()->withInput();
}
return view('test.index');
});
また、【backヘルパ関数】を使わずとも【validateメソッド】を使えば同様にデータを残したままリダイレクト出来ます!
便利だなぁー。
// 名前が入力されているか確認
Route::post('/testregist', function (Request $request) {
$request->validate([
'name' => 'required',
]);
return view('test.index');
});
感想
Laravelの公式ドキュメントを見ながら勉強しているのですが、読むだけでは分からなかったものがサンプルコード書いてみたら少し理解できるようになり良かったです。
ただ、使い方は分かってもどういう時に便利なのかは分からなかったりするので、実際業務で使用する機会が出てくれば、更に理解が深まるのかな?と思いました。
〜おわり〜