Знаете ли вы, почему не отображаются меню выбора, текст ввода и элементы формы textarea? - PullRequest
0 голосов
/ 03 июня 2018

Я хочу, чтобы макет был слева, но он отображается справа.Знаете ли вы, почему в меню выбора не отображается тип ввода текста и текстовой области?

enter image description here

В модели вопросов есть этот метод getHtmlInput(), который используется в представлении для генерации полей формы:

В registration.blade.php вопросы представлены с кодом ниже:

@if ($allParticipants == 0)
    @foreach($selectedRtype['questions'] as $customQuestion)

        <div class="form-group">
            <label for="participant_question">{{$customQuestion->question}}</label>
            @if($customQuestion->hasOptions())
                {!! $customQuestion->getHtmlInput(
                    $customQuestion->name,
                    $customQuestion->options,
                    ($customQuestion->pivot->required == '1'),
                    'form-control',
                    $customQuestion->type)
                !!}
            @endif
            <input type="hidden"
                   name="participant_question_required[]"
                   value="{{ $customQuestion->pivot->required }}">
            <input type="hidden"
                   value="{{ $customQuestion->id }}"
                   name="participant_question_id[]"/>
        </div>
    @endforeach
@endif

Сгенерированный html:

public function getHtmlInput($name = "", $options = "", $required = false, $class = "", $customtype=false)
    {
        $html = '';
        $html .= $customtype == 'select' ? "<select name='$name' class='$class' ".($required?:" required").">" : '';


        foreach($options as $option) {
            switch ($customtype) {
    case "text":
        $html .= " 
                <div class='form-group'>
                    <input type='text' name='participant_question' class='form-control'". ($required?:" required") . ">".
            '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

            "</div>";

        $html .= "<input type='text' name='participant_question' value='".$option->value."' class='form-control'" . ($required?:" required") . ">";
        break;
    case "checkbox":
        $html .= " 
                <div class='form-check'>
                    <input type='checkbox' name='participant_question[]' value='".$option->value."' class='form-check-input'" . ($required?:" required") . ">".
                    '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

                "</div>";
        break;
    case "radio_btn":
        $html .= " 
                <div class='form-check'>
                    <input type='radio' name='participant_question[]' value='".$option->value."' class='form-check-input'" . ($required?:" required") . ">".
            '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

            "</div>";
        break;
    case "select_menu":
        $html .= "<option value='".$option->value."'>";
        break;
    case "textarea":
        $html .= "
          <div class='form-group'>
                <textarea name='participant_question' class='form-control' rows='3'" . ($required?:" required") . ">"
                    . $option->value .
                "</textarea>
        </div>";

        break;
            }
        }

        $html .= $customtype == 'select' ? "</select>" : '';

        return $html;
    }

https://jsfiddle.net/za2LpgL7/

1 Ответ

0 голосов
/ 03 июня 2018

Да.У вас есть пара вещей, которые мешают этому работать.

Во-первых, это не проблема кода - у вас просто нет никаких опций для объекта.Код

@if($customQuestion->hasOptions())

завершается ошибкой, так как к customQuestion не прикреплены параметры.Таким образом, код для полей ввода никогда не вводится.Создайте тестовый объект и прикрепите параметры точно.Это может или не может работать, но это приведет вас к следующему шагу, чтобы увидеть, работает ли функция getHtmlInput().

На этой ноте установленная скрипка показывает, что функция getHtmlInput()либо отсутствует какой-либо код, либо в объекте отсутствует параметр типа.Похоже, что функция вводит опции для поля выбора, но без тега выбора.Вам нужно инициализировать выбор в вашей функции (добавить в функцию нужные теги HTML <select></select>).Я вижу, вы договорились об этом с помощью последнего параметра метода, $customtype=false, но, похоже, это также не установлено , входящее в функцию.Если вы посмотрите на скрипку, мы увидим:

<label for="participant_question">Select menu question</label>
<option value="opt1"></option><option value="opt1">

<select> никогда не вводится.Я не думаю, что ваш код слишком далек (хотя я не знаю, как опции попали в скрипку, если не было ни одной, чтобы пройти проверку if), я думаю, вам нужно протестировать свои объекты, чтобы увидеть, что они включают -- убедитесь, что у них есть варианты, убедитесь, что у них есть $customtype и что оно установлено в качестве выбора для первого раунда.Если объект customQuestion имеет правильные параметры, это позволит вам правильно выполнить тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...