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

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

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

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

PHP

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

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

解決済

2回答

1495閲覧

laravelにて配列のバリデーションエラーの変数のindexを使用してエラーメッセージを表示したい

jem32o

総合スコア79

Laravel

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

PHP

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

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

1クリップ

投稿2023/01/05 12:59

編集2023/01/05 13:32

前提

laravelを使用し、標準のバリデーション処理とエラーメッセージの生成の機能を使用しています。

実現したいこと

postで下記のような配列のリクエストデータを送りlaravelのバリデーション機能を使用し、バリデーション判定を行ったあとエラーメッセージを表示しようと思ってます。
エラーメッセージの表示をする際、user.1.img、user.2.img単位でblade上にはエリアを作りたいので、「user.1.img」の「1」は「@foreach($user as $index => $value)」の$indexを使おうと思ってます。
しかし「user.{{ $index }}.img」とすると何も表示されません。「user.1.img」を直書きするとメッセージは表示されるのに「user.{{ $index }}.img」のように変数「$index 」を使うと表示されないのでどうすればメッセージを表示することができるのでしょうか?
※$userは「php2」の内容が入ってます。

発生している問題・エラーメッセージ

blade.php

1@foreach($user as $index => $value) 2<span> 3@php 4 foreach ($errors->get('user.{{ $index }}.img') as $messages) { 5 foreach ($messages as $message){ 6 echo $message; 7 } 8 } 9@endphp 10</span> 11@endforeach

該当のソースコード

php1.php

1'user' => [ 2 1 => [ 3 'name' => 'taro', 4 'img' => [ 5 'img1' => Illuminate\Http\UploadedFile::__set_state(array( 6 'test' => false, 7 'originalName' => 'img1.png', 8 'mimeType' => 'application/octet-stream', 9 'error' => 1, 10 'hashName' => NULL, 11 )), 12 'img2' => Illuminate\Http\UploadedFile::__set_state(array( 13 'test' => false, 14 'originalName' => 'img2.png', 15 'mimeType' => 'application/octet-stream', 16 'error' => 1, 17 'hashName' => NULL, 18 )), 19 'img3' => Illuminate\Http\UploadedFile::__set_state(array( 20 'test' => false, 21 'originalName' => 'img3.png', 22 'mimeType' => 'application/octet-stream', 23 'error' => 1, 24 'hashName' => NULL, 25 )), 26 ] 27 ], 28 2 => [ 29 'name' => 'jiro', 30 'img' => [ 31 'img1' => Illuminate\Http\UploadedFile::__set_state(array( 32 'test' => false, 33 'originalName' => 'img1.png', 34 'mimeType' => 'application/octet-stream', 35 'error' => 1, 36 'hashName' => NULL, 37 )), 38 'img2' => Illuminate\Http\UploadedFile::__set_state(array( 39 'test' => false, 40 'originalName' => 'img2.png', 41 'mimeType' => 'application/octet-stream', 42 'error' => 1, 43 'hashName' => NULL, 44 )), 45 'img3' => Illuminate\Http\UploadedFile::__set_state(array( 46 'test' => false, 47 'originalName' => 'img3.png', 48 'mimeType' => 'application/octet-stream', 49 'error' => 1, 50 'hashName' => NULL, 51 )), 52 ] 53 ], 54];

php2.php

1$user => [ 21 => 'taro', 32 => 'jiro'; 4]

試したこと

$errors->get("'user.'.{{ $index }}.'.img'")にして出力しても何も表示されない
$errors->get('user.1.img'),$errors->get('user.2.img')はエラーメッセージ は表示される。
「$key = 'user.' .$index .'img';」にしてから
$errors->get('{{ $key }}')にして出力しても何も表示されない

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

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

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

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

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

yuma.inaura

2023/01/05 13:30

それぞれどのファイルのコードなのかを明記しませんか?
jem32o

2023/01/05 13:33

@yuma.inaura >それぞれどのファイルのコードなのかを明記しませんか? どの内容のことでしょうか?
guest

回答2

0

これでいけました

php

1@if ($errors->any()) 2 @php 3 $key_img = 'user.'.$index.'.img1'; 4 foreach($errors->get($key_img) as $error) { 5 echo $error; 6 } 7 @endphp 8@endif

投稿2023/01/05 13:51

jem32o

総合スコア79

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

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

0

ベストアンサー

@phpで書いてるのでこの中は全部PHP。

php

1@php 2 foreach ($errors->get('user.{{ $index }}.img') as $messages) { 3 foreach ($messages as $message){ 4 echo $message; 5 } 6 } 7@endphp

ただの'user.{{ $index }}.img'という文字列としか扱われない。"user.$index.img"

投稿2023/01/05 13:45

kawax

総合スコア10377

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

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

jem32o

2023/01/05 13:53

""の中身直接変数入れれないと勘違いしてました "user.$index.img"でいけました ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問