如何根据存储在数据库中的类型更改输入类型?
Posted
技术标签:
【中文标题】如何根据存储在数据库中的类型更改输入类型?【英文标题】:How to change the input type based on the type stored in database? 【发布时间】: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 语句并让它回显不同的输入类型您需要的不同问题类型。不过,您的设计可能会遇到一些限制,因为选择/收音机可以有多个答案,但与同一个问题相关联。不确定这里是如何处理的,或者您的设计中的期望。
【参考方案1】:
在您的 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>)
【讨论】:
以上是关于如何根据存储在数据库中的类型更改输入类型?的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围