Laravel: не может видеть значение переменной, кроме 'radio' - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь перебрать массив с помощью оператора 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 Response

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',
    ]
]

Ответы [ 3 ]

0 голосов
/ 16 октября 2019

можете ли вы изменить свой код

с

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

на

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

и отметить ...

, если вы используете'===' он проверит как значения, так и тип.

0 голосов
/ 18 октября 2019

Ошибка состояла в том, что formOptions пустой был в вопросах, где тип был textarea или флажок. Предполагалось, что foreach будет внутри радиоприемника. Спасибо всем, кто пытался мне помочь.

0 голосов
/ 16 октября 2019

Вы вызываете не тот объект в цикле, вы должны вызывать $ 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

на

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

...