質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1248閲覧

Laravel livewireコンポーネントのエラーを解消したい

m055001

総合スコア72

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/04/08 09:35

実装

Laravelでバリデーションエラーが発生した際にビューにアラートメッセージを表示するコンポーネントを作成しています

<livewire:alert-message :key="'alert_message_'.$id" />

  • ループ内で呼び出しをおこなっており、ループしているコンテンツごとの枠内にアラートを表示するような形です
  • $idはループごとにユニークです

php

1// alert-message.blade.php 2 3@if ($errors->any()) 4 <div class="bg-red-100 border-t-4 border-red-400 rounded-b text-red-700 px-4 py-3 shadow-md my-2" role="alert"> 5 <div class="flex"> 6 <svg xmlns="http://www.w3.org/2000/svg" 7 class="stroke-2 stroke-current h-8 w-8 mr-2 " 8 viewBox="0 0 24 24" 9 fill="none" 10 stroke-linecap="round" 11 stroke-linejoin="round" 12 > 13 <polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon> 14 <line x1="12" y1="8" x2="12" y2="12"></line> 15 <line x1="12" y1="16" x2="12.01" y2="16"></line> 16 </svg> 17 <div class="alert alert-danger pt-1.5"> 18 <ul> 19 @foreach ($errors->all() as $error) 20 <li>{{ $error }}</li> 21 @endforeach 22 </ul> 23 </div> 24 </div> 25 </div> 26@endif

コンソールエラー

呼び出し側でkeyも設定しているのですが、以下のようなエラーが発生します。
(ネストしたコンポーネントで、どのコンポーネントかが判断できない状態のときに出るエラーと認識しています)

Uncaught (in promise) TypeError: Cannot read property 'fingerprint' of null
イメージ説明

疑問

コンポーネント内の @if ($errors->any()) と、すぐ内側にある <div ...> を入れ替えると該当のエラーが発生しなくなります。
ただし、エラーがない場合にdiv要素が表示されてしまっているので、意図している動作にはなっていません。

php

1<div class="bg-red-100 border-t-4 border-red-400 rounded-b text-red-700 px-4 py-3 shadow-md my-2" role="alert"> 2 @if ($errors->any()) 3 <div class="flex"> 4 <svg xmlns="http://www.w3.org/2000/svg" 5 class="stroke-2 stroke-current h-8 w-8 mr-2 " 6 viewBox="0 0 24 24" 7 fill="none" 8 stroke-linecap="round" 9 stroke-linejoin="round" 10 > 11 <polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon> 12 <line x1="12" y1="8" x2="12" y2="12"></line> 13 <line x1="12" y1="16" x2="12.01" y2="16"></line> 14 </svg> 15 <div class="alert alert-danger pt-1.5"> 16 <ul> 17 @foreach ($errors->all() as $error) 18 <li>{{ $error }}</li> 19 @endforeach 20 </ul> 21 </div> 22 </div> 23 @endif 24</div>

記載したコードだけでは不明な部分もあるかもしれないので、その際は教えていただければ幸いです。

  • エラーの解決方法
  • 【疑問】に記載した現状がなぜ起こるのか

わかる方がいらっしゃいましたら、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問