Laravel10変更点:コントローラの戻り値の型指定(Response、View、RedirectResponse)を分かりやすく解説

Laravelバージョンアップ・ニュース

Laravel10では、戻り値と引数に型指定が入った状態となります。モデルを指定してコントローラを作成した時も、メソッドの戻り値に型指定が追加されます。

これによって、どんな影響があるんだろう?

これからどうしなきゃいけないの?

という方のために、コントローラのメソッドの戻り値の設定方法や、間違えた型を指定したときの影響、型を指定しなかった場合はどうなるか、分かりやすく解説をしていきます。

今後、Laravelでコードを書く上で役立ててくださいね。

なお今回はコントローラを例にお伝えしますが、Laravel10では、コントローラ以外のファイルにも型指定が追加されています。

2023年2月23日追記:戻り値の型指定は、Laravel10.1では外されていました。自分で戻り値の型を指定することは可能です。その場合は、本ブログの内容をお役立てください。

★動画編はこちら★

Laravel10変更点:戻り値の型の指定方法と、型を指定しないとどうなるか、分かりやすく解説しました
★学習サイト【Laravelの教科書】基礎編無料プレゼント中♪ 【2023年2月23日追加事項】Laravel10.1より、コントローラを作成した時、戻り値の型指定はなくなっていました。本動画はあまりお役にたたない感じに...

コントローラの戻り値の型ってどんなものがあるの?

コントローラの戻り値の型としては、次のものがよく使われると考えられます。

【コントローラの戻り値の型】

■Response:

レスポンス型。何らかのレスポンスを返す時に使う。

■RedirectResponse:
リダイレクトレスポンス型。リダイレクト時に使う。
■View:
ビュー型。ページを表示するだけの時に使う。

戻り値の方は、コントローラの各メソッドで、次のように指定します。

public function メソッド名(): 戻り値の型 { 処理内容 }

コントローラの戻り値の型の指定方法

次に、戻り値の型を使って、どのようにコードを入力するのか、見ていきましょう。

Response型の例

Response型を使う場合には、コントローラの上部に、下記のuse宣言をいれます。

次のようにコードを入れると、resources/views/welcome.blade.phpファイルを表示できます。

responseでは、jsonを返したり、headerを指定したりすることもできます。公式マニュアルに書き方が紹介されています。

RedirectResponse型の例

RedirectResponse型を使う場合には、コントローラの上部に、下記のuse宣言をいれます。

戻り値でRedirectResponse型を使用したいメソッドでは、次のように、コードを書きます。

上記のようにコードを入れると、リダイレクトして、’welcome’という名前のルート設定で指定したファイルを表示できます。

View型の例

View型を使う場合には、コントローラの上部に、下記のuse宣言をいれます。

戻り値でView型を使用したいメソッドでは、次のように、コードを書きます。

上記のようにコードを入れると、resources/views/welcome.blade.phpファイルを表示できます。

2つの型を指定したい場合

メソッドによっては、「ReseponseかRedirectResponseのどちらか」という場合があります。たとえば、下記のような処理を行いたい場合です。

  • 管理者だったら編集画面のviewを表示
  • 一般ユーザだったらindexにリダイレクトして「編集権限がありません」と表示

そんな場合には、 | で区切って、複数の型を指定できます。

コード例を紹介しますね。まず、use宣言をいれます。

下記のように処理を入れます。

なぜ戻り値を指定するのか?

なぜ戻り値を指定する必要があるのかですが、これは、不具合を減らすためです。

戻り値を指定しておくと、指定した型と違う戻り値が返されると、エラーになります。たとえば、下記のように、Response型を指定しながら、View型を返していると、エラーになります。

【戻り値の型エラーの例】

Return value must be of type Illuminate\Http\Response, Illuminate\View\View returned
「Response型でなければいけないのに、View型が返されているよ」

この場合は、responseメソッドを使って、戻り値を指定すると解決できます。

このようにエラーになってくれることで、開発段階で正しい、つまり想定通りの処理が書かれていることがチェックできます。もしもエラーにならなかった場合、想定とは違う処理を書いたまま気づかず、不具合につながるおそれがあります。

戻り値の型を指定しないとどうなるの?

ちなみに、戻り値を指定しないでメソッドを入れても、特に問題はありません。検証してみましたが、現時点では、普通に処理が行われました。

ただ、モデルを指定してコントローラを作成したりるすと、予め、各メソッドに戻り値が設定された状態でファイルができます。

【モデル名を指定してコントローラを作成した時】

index, create, editといったページを保存するためのメソッドの戻り値には、Response型が設定されます。store、update, destroyといった処理用のメソッドにはRedirectResponse型が設定されます。

Laravel Breezeなどをインストールすると、ユーザー登録ページやログインページが作成されますが、この部分にはView型が設定されます。

おまけ:引数の型指定(タイプヒント)について

なおLaravelでは、モデル名を指定してコントローラを作成すると、引数にも、型が指定されます。こちらは、Laravel9でも搭載されていました。下記の赤丸のような感じで、型が指定されます。

上記のようにすると、$userは、Userモデルの型になります。これによって、Userモデルを通じてusersテーブルから、該当のレコードを取ってきてくれます。なかなか便利な技です。

「そう言われても、どんなふうに使うのかピンとこない」

と思ったら、学習サイト「Laravelの教科書」で、使い方を解説しています。「Laravelの教科書」は、Laravelの使い方を学びつつ、フォーラムサイトを作成していく実践的な教材です。

ご興味あれば、下記ボタンをクリックして、詳細を見てみてくださいね。

Laravelの教科書について詳しく知る

基礎編部分は無料です。

さいごに

以上、Laravel10から新たに加わった戻り値の型指定について、コントローラの戻り値の型を使って解説してきました。

Laravel10では、コントローラ以外でも型指定が追加されます。適切に型を指定して、不具合の出にくいWebアプリを開発していきましょう。

追伸:戻り値の型指定は、Laravel10.1ではなくなってました

ご紹介したコントローラ作成時の戻り値の型指定は、Laravel10.1ではなくなってました!

「どうしてそうなったの!?」と思ったら、こちら読んでください。

かなり長いので、まとめますと、こんな感じです。

  1.  戻り値の型指定に不満が出てくる
  2. Taylorさん(Laravel作者)が、mixedという型を入れておくことを提案。これなら、void以外、何を入れてもOKな型とのこと
  3. 賛成の人もいるが、「mixedを入れるなら、そもそも型指定なくてもよいのでは?」という意見も。(わたしもそう思います^^;)
  4. 意見が色々飛び交う
  5. 戻り値の型指定をコントローラから取り除くことに決定!

Laravel10.1から、この変更が反映されています。

ひっかきまわされることもありますが、個人的には、変化が速く、ユーザーの意見にも柔軟なLaravelの姿勢が好きです。

Laravelバージョンアップ・ニュース

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

 

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
デプロイ講座付。StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました