Laravel: tidak dapat melihat nilai variabel selain 'radio'

Saya mencoba mengulang array dengan pernyataan foreach. Saya mendapatkan array dari API, bukan milik saya. Saya menggunakan foreach dari Laravel di blade. Entah bagaimana di pedang saya jika saya menelusuri array, masing-masing memiliki tipe, ia hanya melihat tipe "radio". Tidak ada kotak centang atau area teks. Ingin tahu mengapa dan apa yang bisa saya lakukan untuk memperbaikinya.

<form action="/sendForm" method="post">@csrf
            @foreach($survey['data']['formCategories'] as $category)
                <h3 id="{{$category['name']}}">{{$category['name']}}</h3>  <!-- Enquete -->
                <hr/>

                @foreach($category['formQuestions'] as $question)

                @if($question['type'] === 'header' || $question['type'] === 'text' || $question['type'] === 'date')
                    <!-- Don't show -->
                    @else

                        <div>
                            <p class="questions">{{$question['name']}}</p>

                            <fieldset id="{{$question['id']}}" class="form-group">
                                @foreach($question['formOptions'] as $answer)
                                    @if($question['type'] === "textarea" || $question['type'] === "paragraph")
                                        TextArea
                                    @elseif($question['type'] === "checkbox")
                                        Checkbox
                                    @elseif($question['type'] === "radio")
                                        Radio
                                    @endif
                                @endforeach
                            </fieldset>
                        </div>
                    @endif
                @endforeach
            @endforeach
            <input type="submit" value="Sent" class="submit-btn" id="versturen">
</form>

Pada akhirnya saya ingin menampilkan form input sesuai dengan tipenya. Jadi jika tipenya textarea tampilkan textarea, jika checkbox buatlah checkbox, begitu pula dengan radio.

Saya minta maaf atas tata bahasa yang buruk, dan saya tahu itu bukan pertanyaan terbaik, tapi saya tidak tahu bagaimana lagi harus bertanya.

Sunting

Respon Api

name: '',
formCategories: [ //Different Categories
    0:  name:''
    formQuestions: [ //Questions
    0:  name: '',
        type: '',   //Is either Radio, Checkbox or TextArea
        formOptions: [ //Possible answers if necessary, empty if not needed.
        0:  name: ''
        ]
    ],
],

Sunting 2

dd dengan tipe textarea:

array:7 [
name: '',
formQuestions: [
    name: '',
    type: 'textarea',
    ]
]

person SilkeNL    schedule 16.10.2019    source sumber
comment
Bisakah Anda memberikan struktur respons API, mungkin itu akan membantu? RESPONS YANG DIEDIT Saya tidak yakin apa penyebab masalahnya tetapi saya pikir Anda harus memeriksa apakah Anda dapat mengakses nilai $question['formOptions' di for-loop Anda dengan membuang dd($question['formOptions'). Jika tidak dapat diakses, mungkin itu penyebabnya. Jika tidak, beri tahu kami berapa nilai yang dibuang. Anda juga dapat mempertimbangkan untuk membagikan struktur respons API (saya tahu Anda sudah melakukannya).   -  person anasey    schedule 16.10.2019
comment
bisakah Anda melakukan dd($question) sebelum foreach dan menunjukkan kepada kami jawabannya?   -  person DEEPAK    schedule 16.10.2019
comment
@DEEPAK Saya sudah mencobanya juga, tidak berhasil dd $question   -  person SilkeNL    schedule 16.10.2019
comment
Sebelum formulir Anda, tambahkan {{ dd($question); }}, dan Anda akan membuang objeknya. Melakukan hal ini tidak akan memperbaiki apa pun secara ajaib - namun melakukan hal tersebut dan memberi kami hasilnya dapat membantu kami membantu Anda.   -  person Qirel    schedule 16.10.2019
comment
@Qirel Jika saya melakukan ini sebelum formulir, $question masih akan ada   -  person SilkeNL    schedule 16.10.2019
comment
Maaf, saya menyebutkannya di dalam @foreach kedua, jika sudah ditentukan.   -  person Qirel    schedule 16.10.2019
comment
@Qirel Saya kemudian mendapatkan kembali yang pertama dari API, yang merupakan tipe radio   -  person SilkeNL    schedule 16.10.2019
comment
Dari respons API Anda, tipe dan semuanya kosong? Data (dan dump yang kami minta) relevan dengan pertanyaan, jadi harap tambahkan. Kami hanya menebak-nebak sebaliknya, dan Anda tidak akan mendapatkan banyak bantuan jika kami tidak mengetahui data apa yang Anda hadapi.   -  person Qirel    schedule 16.10.2019
comment
Bagi saya kodenya baik-baik saja, pasti ada masalah pada data Anda, mungkin Anda mendapatkan radio secara keseluruhan   -  person DEEPAK    schedule 16.10.2019
comment
Saya baru saja mengedit pertanyaan dengan dd dari panggilan api dengan tipe pertanyaan textarea   -  person SilkeNL    schedule 16.10.2019


Jawaban (3)


Anda memanggil objek yang salah dalam loop, Anda seharusnya memanggil $answer, jadi ubahlah

@foreach($question['formOptions'] as $answer)
@if($question['type'] === "textarea" || $question['type'] === "paragraph")
     TextArea
@elseif($question['type'] === "checkbox")
     Checkbox
@elseif($question['type'] === "radio")
     Radio
@endif
@endforeach

to

@foreach($question['formOptions'] as $answer)
@if($answer['type'] === "textarea" || $answer['type'] === "paragraph"
     TextArea
@elseif($answer['type'] === "checkbox")
     Checkbox
@elseif($answer['type'] === "radio")
     Radio
@endif
@endforeach

Karena cara Anda melakukannya, Anda hanya memanggil instance PERTAMA dari loop, di $question, sebagai arraynya. Tapi $answer adalah objek spesifik dalam array untuk loop foreach.

person Udhayan Nair    schedule 16.10.2019
comment
Terima kasih tetapi $answer tidak memiliki tipe - person SilkeNL; 16.10.2019
comment
ulangi saja $quest, karena pertanyaan memiliki tipe kan? - person Udhayan Nair; 16.10.2019
comment
Ya $question memiliki tipe, itu juga yang menjadi dasar kode saya. - person SilkeNL; 16.10.2019
comment
bisakah Anda mencoba dd($question) dan menunjukkan kepada kami apa yang Anda dapatkan di sana? - person Udhayan Nair; 16.10.2019
comment
Ya, sepertinya tidak suka jika saya melakukan itu dan hanya memberikan kesalahan pada helper.php dari laravel - person SilkeNL; 16.10.2019
comment
taruh dd di bawah sini @foreach($category['formQuestions'] as $question) {{dd($question}}.apa kesalahan dari helper.php btw? - person Udhayan Nair; 16.10.2019
comment
dd tidak terlalu membantu, ia memberikan yang pertama yaitu tipe radio. Maaf saya tidak dapat memicu kesalahan lagi, lupa di mana atau kapan saya mendapatkannya dan saat ini banyak hal yang terjadi pada kode saya - person SilkeNL; 16.10.2019
comment
tunggu kalau semua punya tipe radio, itu data yang didapat, jadi mengembalikan radio ke kamu sudah benar?? - person Udhayan Nair; 16.10.2019
comment
Tidak, ada jenis kotak centang dan area teks. Saya memeriksa dd pertama untuk seluruh panggilan API. Namun karena suatu alasan saya tidak diperbolehkan memposting keseluruhannya. Saya sekarang memeriksa dengan dd ke bagian tertentu dari array untuk mendapatkan tipe textarea - person SilkeNL; 16.10.2019
comment
oke sobat, jadi pada dasarnya, perulangan Anda salah, karena Anda hanya mengembalikan satu contoh di mana semua jenisnya adalah radio, seperti dari apa yang Anda katakan kepada saya, ketika Anda dd($category['formQuestions'] di mana Anda mendapatkan $question dari, semua array memiliki tipe radio, loop Anda hanya mendeteksi ini - person Udhayan Nair; 16.10.2019
comment
Saya baru saja mengedit pertanyaan saya untuk memasukkan formulir pertanyaan dengan textarea - person SilkeNL; 16.10.2019

bisakah kamu mengubah kodemu

dari

@if($question['type'] === "textarea" || $question['type'] === "paragraph")

ke dalam

@if($question['type'] == "textarea" || $question['type'] == "paragraph")

dan cek...

jika Anda menggunakan '===' itu akan memeriksa nilai dan jenisnya.

person Raa    schedule 16.10.2019
comment
Saya baru mencobanya, hasilnya tidak banyak - person SilkeNL; 16.10.2019

Kesalahannya adalah formOptions kosong ada pada pertanyaan yang tipenya adalah textarea atau kotak centang. Foreach seharusnya berada di dalam pernyataan radio if. Terima kasih kepada semua orang yang mencoba membantu saya.

person SilkeNL    schedule 18.10.2019