Как изменить тип ввода в зависимости от типа, хранящегося в базе данных? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть форма для создания пользовательских вопросов.Пользователь должен ввести вопрос, а также тип поля (текст, длинный текст, флажок, выбрать меню, переключатель) для создания пользовательского вопроса:

<form method="post" class="clearfix" action="{{route('questions.store', ['conference_id' => $conference->id])}}" enctype="multipart/form-data">
    {{csrf_field()}}
    <div class="form-group">
        <label for="question">Question</label>
        <input type="text" class="form-control" name="question" id="question">
    </div>
    <div class="form-group">
        <label for="type" class="text-heading h6 font-weight-semi-bold">Type of field</label>
        <select class="form-control" name="type" id="type">
            <option value="text">Text</option>
            <option value="long_text">Long Text</option>
            <option value="checkbox">Checkbox</option>
            <option  value="radio_btn">Radio Button</option>
            <option  value="select_menu">Select menu</option>
        </select>
    </div>

    <div>
        <input type="submit" class="btn btn-primary" value="Store"/>
    </div>
</form>

В базе данных в таблице вопросов естькак:

id       question                    conference_id        type
1        Whats your phone?               1                 text
2        Want receive notifications?      1                 radio_btn
3       ..............                    1                 checkbox
4       ..............                    1                 long_txt
5       ..............                    1                 select_menu

Затем в registration.blade.php я показываю пользовательские вопросы пользователю, чтобы он мог ответить.Вопрос уже представлен пользователю с кодом ниже.Я сомневаюсь, как изменить тип ввода в зависимости от типа вопроса, хранящегося в базе данных.

Знаете ли вы, как этого можно достичь?Как это всегда возникает вопрос с типом текста.Но если тип вопроса является, например, флажком, он должен отображаться как флажок, а не как текст типа ввода.

@foreach($selectedType['questions'] as $customQuestion)
    <div class="form-group">
        <label for="participant_question">{{$customQuestion->question}}</label>
        <input type="text"
               @if($customQuestion->pivot->required == "1") required @endif
               class="form-control" name="participant_question[]">
        <input type="hidden" name="participant_question_required[]"
               value="{{ $customQuestion->pivot->required }}">
        <input type="hidden" value="{{ $customQuestion->id }}" name="participant_question_id[]"/>
    </div>
@endforeach

1 Ответ

0 голосов
/ 24 мая 2018

В вашей модели Question создайте функцию для вывода различных требуемых типов ввода.

Например,

public function getHtmlInput($name = "", $id = "", $required = false, class="", val = "", $customtype=false) 
{
    switch ($this->type) {
        case "text": 
              return "<input type='".($customtype?:"text")."' name='$name' id='$id' class='$class' value='$val'" . ($required?:"required") . ">";
        case "checkbox":
        ...
    }
}

Тогда, на ваш взгляд, вы можете просто сделать $question->getHtmlInput(<params>)

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