イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

Laravel5.6でResponseクラスの勉強してみた

こんにちわ、すももです。
日中はまだまだ暑いですが、夜はクーラーなしでも寝れる時期になりましたね〜
鈴虫の鳴き声を聞くと秋がくるなぁとしみじみ感じます。

さて、前回はRequestクラスの勉強をしたので、今回はResponseクラスの勉強をしてみました!

一番シンプルなレスポンスの返し方

Laravelのレスポンスを返す方法で、一番シンプルなのはルートやコントローラから文字列を返す方法です。

例:/responseにアクセスがきたらレスポンスの勉強中!を返す

Route::get('/response', function () {
	return 'レスポンスの勉強中!';
});
1.png

わーい、表示されましたー!これは簡単ですね!

しかし実際はそんな単純なレスポンスを返すことはあまりないと思うので、他も見ていきましょう〜!


いろいろなリダイレクト

〜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の公式ドキュメントを見ながら勉強しているのですが、読むだけでは分からなかったものがサンプルコード書いてみたら少し理解できるようになり良かったです。
ただ、使い方は分かってもどういう時に便利なのかは分からなかったりするので、実際業務で使用する機会が出てくれば、更に理解が深まるのかな?と思いました。

〜おわり〜