Laravel: ไม่เห็นค่าตัวแปรอื่นนอกเหนือจาก 'วิทยุ'

ฉันกำลังพยายามวนซ้ำอาร์เรย์ด้วยคำสั่ง foreach ฉันได้รับอาร์เรย์จาก API ไม่ใช่ของฉัน ฉันใช้ foreach จาก Laravel ในเบลด ถ้าผมผ่านอาเรย์ในเบลดของผม แต่ละตัวจะมีประเภท และจะเห็นเฉพาะประเภท "วิทยุ" เท่านั้น ไม่มีช่องทำเครื่องหมายหรือพื้นที่ข้อความ สงสัยว่าทำไมและสิ่งที่ฉันสามารถทำได้เพื่อแก้ไข

<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>

ในที่สุดฉันต้องการแสดงตามประเภทอินพุตแบบฟอร์ม ดังนั้นหากประเภทเป็น textarea จะแสดง textarea ถ้าเป็นช่องทำเครื่องหมายให้ทำเครื่องหมายในช่องและเช่นเดียวกันกับวิทยุ

ฉันขอโทษสำหรับไวยากรณ์ที่ไม่ดี และฉันรู้ว่านี่ไม่ใช่คำถามที่ดีที่สุด แต่ฉันไม่รู้จะถามอย่างไร

แก้ไข

การตอบสนองของ 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: ''
        ]
    ],
],

แก้ไข 2

dd ด้วยประเภท textarea:

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

person SilkeNL    schedule 16.10.2019    source แหล่งที่มา
comment
คุณช่วยระบุโครงสร้างของการตอบสนองของ API ได้ไหมซึ่งอาจช่วยได้ แก้ไขการตอบกลับ ฉันไม่แน่ใจว่าสาเหตุของปัญหาคืออะไร แต่ฉันคิดว่าคุณควรตรวจสอบเพื่อดูว่าคุณสามารถเข้าถึงค่า $question['formOptions' ใน for-loop ของคุณโดยการทิ้ง dd($question['formOptions') หรือไม่ ถ้าไม่สามารถเข้าถึงได้นั่นอาจเป็นสาเหตุ มิฉะนั้น โปรดแจ้งให้เราทราบว่าค่าที่ทิ้งคืออะไร คุณสามารถพิจารณาแชร์โครงสร้างของการตอบกลับ API ได้เช่นกัน (ฉันเห็นว่าคุณทำไปแล้ว)   -  person anasey    schedule 16.10.2019
comment
คุณช่วย dd($question) ก่อนรายงานและแสดงคำตอบให้เราทราบได้ไหม   -  person DEEPAK    schedule 16.10.2019
comment
@DEEPAK ฉันได้ลองแล้วเช่นกัน มันใช้ไม่ได้กับ dd $question   -  person SilkeNL    schedule 16.10.2019
comment
ก่อนแบบฟอร์มของคุณ ให้เพิ่ม {{ dd($question); }} แล้วคุณจะ ดัมพ์ ออบเจ็กต์ การทำเช่นนี้ไม่สามารถแก้ไขสิ่งใดๆ ได้อย่างน่าอัศจรรย์ แต่การทำเช่นนั้นและให้ผลลัพธ์แก่เราสามารถช่วยเราช่วยคุณได้   -  person Qirel    schedule 16.10.2019
comment
@Qirel หากฉันจะทำสิ่งนี้ก่อนที่แบบฟอร์ม $question จะยังคงอยู่   -  person SilkeNL    schedule 16.10.2019
comment
ขออภัย ฉันพูดถึงใน @foreach ที่สองเมื่อมันถูกกำหนดไว้   -  person Qirel    schedule 16.10.2019
comment
@Qirel ฉันจะได้รับอันแรกกลับมาจาก API ซึ่งเป็นประเภทวิทยุ   -  person SilkeNL    schedule 16.10.2019
comment
จากการตอบกลับ API ของคุณ ประเภทและทุกอย่างว่างเปล่าใช่ไหม ข้อมูล (และดัมพ์ที่เราขอ) เกี่ยวข้องกับคำถาม ดังนั้นโปรดเพิ่มข้อมูลดังกล่าว เราคาดเดาเป็นอย่างอื่นโดยสุ่มสี่สุ่มห้า และคุณจะไม่ได้รับความช่วยเหลือมากนักหากเราไม่ทราบว่าคุณกำลังจัดการกับข้อมูลใด   -  person Qirel    schedule 16.10.2019
comment
โค้ดดูดีสำหรับฉัน อาจมีปัญหาบางอย่างในข้อมูลของคุณอาจเป็นเพราะคุณได้รับวิทยุทั้งหมด   -  person DEEPAK    schedule 16.10.2019
comment
ฉันเพิ่งแก้ไขคำถามด้วย dd จากการเรียก api พร้อม textarea ประเภทคำถาม   -  person SilkeNL    schedule 16.10.2019


คำตอบ (3)


คุณกำลังเรียกวัตถุผิดในลูป คุณควรเรียก $answer ดังนั้นเปลี่ยน

@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

เนื่องจากวิธีที่คุณทำอยู่ คุณจะเรียกเฉพาะอินสแตนซ์แรกของลูปที่ $question เป็นอาร์เรย์เท่านั้น แต่ $answer เป็นวัตถุเฉพาะในอาร์เรย์สำหรับลูป foreach

person Udhayan Nair    schedule 16.10.2019
comment
ขอบคุณ แต่ $answer ไม่มีประเภท - person SilkeNL; 16.10.2019
comment
วนซ้ำเพียง $question เนื่องจากคำถามมีประเภทใช่ไหม - person Udhayan Nair; 16.10.2019
comment
ใช่ $question มีประเภทหนึ่ง นั่นคือสิ่งที่โค้ดของฉันใช้ - person SilkeNL; 16.10.2019
comment
คุณอาจลอง dd($question) แล้วแสดงให้เราเห็นว่าคุณได้อะไรมาบ้าง - person Udhayan Nair; 16.10.2019
comment
ฉันทำไปแล้ว ดูเหมือนจะไม่ชอบถ้าฉันทำแบบนั้น และแค่แสดงข้อผิดพลาดใน helper.php จาก laravel - person SilkeNL; 16.10.2019
comment
ใส่ dd ไว้ด้านล่างที่นี่ @foreach($category['formQuestions'] as $question) {{dd($question}}.อะไรคือข้อผิดพลาดจาก helper.php btw? - person Udhayan Nair; 16.10.2019
comment
dd ไม่ได้ช่วยอะไรจริงๆ แต่มันให้อันแรกซึ่งเป็นประเภทวิทยุ ขออภัย ฉันไม่สามารถทำให้เกิดข้อผิดพลาดได้อีก ลืมไปว่าฉันได้รับมันที่ไหนหรือเมื่อไร และ ณ จุดนี้ มีเหตุการณ์มากมายเกิดขึ้นในโค้ดของฉัน - person SilkeNL; 16.10.2019
comment
เดี๋ยวก่อนถ้าทั้งหมดมีวิทยุประเภทหนึ่ง นั่นคือข้อมูลที่คุณได้รับ ดังนั้นการส่งวิทยุกลับคืนให้คุณถูกต้องไหม?? - person Udhayan Nair; 16.10.2019
comment
ไม่ มีช่องทำเครื่องหมายและพื้นที่ข้อความหลายประเภท ฉันตรวจสอบ dd แรกสำหรับการเรียก API ทั้งหมด แต่ด้วยเหตุผลหลายประการ ฉันไม่ได้รับอนุญาตให้โพสต์ทั้ง dd ตอนนี้ฉันกำลังตรวจสอบด้วย dd ไปยังบางส่วนของอาร์เรย์เพื่อรับประเภท textarea - person SilkeNL; 16.10.2019
comment
ตกลงเพื่อน โดยพื้นฐานแล้วการวนซ้ำของคุณผิดเนื่องจากคุณส่งคืนอินสแตนซ์เดียวที่มีวิทยุทุกประเภทตามที่คุณบอกฉันเมื่อคุณ dd($category['formQuestions'] ซึ่งคุณได้รับ $question จากนี้ไป อาร์เรย์ทั้งหมดจะมีวิทยุประเภทหนึ่ง ลูปของคุณตรวจพบเฉพาะสิ่งนี้เท่านั้น - person Udhayan Nair; 16.10.2019
comment
ฉันเพิ่งแก้ไขคำถามเพื่อรวมแบบฟอร์ม dd คำถามพร้อม textarea - person SilkeNL; 16.10.2019

คุณช่วยเปลี่ยนรหัสของคุณได้ไหม

จาก

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

เข้าไปข้างใน

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

และตรวจสอบ...

หากคุณใช้ '===' มันจะตรวจสอบค่าและประเภท

person Raa    schedule 16.10.2019
comment
ฉันแค่ลองทำดู แต่ก็ไม่ได้ผลอะไรมากนัก - person SilkeNL; 16.10.2019

ข้อผิดพลาดคือ formOptions ว่างเปล่าอยู่ในคำถามที่ประเภทเป็นพื้นที่ข้อความหรือช่องทำเครื่องหมาย foreach ควรอยู่ในคำสั่ง if ของวิทยุ ขอบคุณทุกคนที่พยายามช่วยฉัน

person SilkeNL    schedule 18.10.2019