【发布时间】:2018-05-24 01:03:03
【问题描述】:
我有一个表格供用户创建自定义问题。用户需要介绍问题以及字段类型(文本、长文本、复选框、选择菜单、单选按钮)来创建自定义问题:
<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
【问题讨论】:
-
它不像制作 QuestionType 类或类似的东西来处理这个问题那样优雅,但您可以在
type上使用 switch 语句并让它回显不同的输入类型您需要的不同问题类型。不过,您的设计可能会遇到一些限制,因为选择/收音机可以有多个答案,但与同一个问题相关联。不确定这里是如何处理的,或者您的设计中的期望。