PHP/Laravel

laravelでビューにエラーメッセージを渡す方法 (フォーム)

こんにちは。リノです。

laraveでECサイトのフォームを作っているのですが、コントローラー側でバリデーションチェックをして、エラーが1つでもあった場合にはビューにエラーメッセージを表示するという作業をしていたのですが、エラーを表示させるまでに色々と考えさせられたので、共有します。

laravelでviewにエラーメッセージを渡すまでに苦労したポイント

苦労したポイントは色々あったのですが、大きく分けると2点です。

  • コントローラーからビューに戻そうとすると値が消えてる
  • コントローラーからビューにエラーメッセージを渡す方法がわからない

それぞれ詳しく解説します。

コントローラーからビューに戻そうとすると値が消えてる

最初は以下みたいな形でエラーがあった場合に処理をしていました。

これだと、errorメッセージは渡されるのですが、元のページでPOSTした内容が引き継がれず、元ページに戻った時にはフォーム欄は空白になってしまいます。

そこで、以下の方法を使うことで、一先ずフォームの空欄を避けることは出来ます。

ちなみに、フォームの側には{{old(‘name’)}}と書いておかないと、フォームの空欄を避けることは出来ません。具体的には、こんな感じ。

ここまでで、フォームの空欄を避けることが出来るのですが、エラーメッセージを持ってくることが出来ない。という事で、次はエラーメッセージの送り方。

コントローラーからビューにエラーメッセージを渡す方法

コントローラーからビューにエラーメッセージを渡す方法はかなり簡単。

withinputの後に、witherrorsを書いて、witherrorsの中に、入れたいエラーメッセージを入れればオーケーです。

こうしておく事で、ビュー側にエラーメッセージを渡すことができます。ちなみに、ビュー側には$errorsという変数で値が渡されています。

で、errorsメッセージを使うには、foreachを使えばオーケーです。

ここまでしてあげると、ちゃんとエラーメッセージが表示されるようになります。