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, покажите текстовое поле, если это флажок, сделайте флажок, и то же самое с радио.

Я извиняюсь за плохую грамматику, и я знаю, что это не лучший вопрос, но я не знал, как еще его задать.

РЕДАКТИРОВАТЬ

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 с текстовым полем типа:

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

person SilkeNL    schedule 16.10.2019    source источник
comment
Можете ли вы предоставить структуру ответа API, может быть, это поможет? ОТРЕДАКТИРОВАННЫЙ ОТВЕТ Я не уверен, в чем причина проблемы, но я думаю, вам следует проверить, можете ли вы получить доступ к значению $question['formOptions' в цикле for, сбросив dd($question['formOptions'). Если он недоступен, то это может быть причиной. В противном случае сообщите нам, что представляет собой сброшенное значение. Вы также можете поделиться структурой ответов API (я вижу, вы уже это сделали).   -  person anasey    schedule 16.10.2019
comment
Вы можете просто dd($question) перед foreach и показать нам ответ?   -  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 Если бы я сделал это перед формой, $вопрос еще не существовал бы   -  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 с текстовым полем типа вопроса.   -  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
поместите сюда дд ниже @foreach($category['formQuestions'] as $question) {{dd($question}}.кстати, в чем была ошибка из helper.php? - person Udhayan Nair; 16.10.2019
comment
Дд на самом деле не помогает, он дает первое, которое является типом радио. Извините, я не могу снова вызвать ошибку, забыл, где и когда я ее получил, и на данный момент в моем коде так много всего произошло. - 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 в вопрос с текстовой областью. - 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 пуста была в вопросах, где тип был textarea или checkbox. Предполагалось, что foreach находится внутри оператора радио, если. Спасибо всем, кто пытался мне помочь.

person SilkeNL    schedule 18.10.2019