我希望左侧的布局,但右侧的布局显示。你知道为什么没有出现在选择菜单,输入类型文本和textarea?
在问题模型中,有一个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;
}
答案 0 :(得分:1)
是。你有几个项目阻止它工作。
首先不是代码问题 - 您只是对该对象没有任何选项。代码
@if($customQuestion->hasOptions())
失败,因为customQuestion没有附加选项。因此,输入框的代码永远不会被输入。创建一个测试对象,确保附加选项。这可能会或可能不会奏效,但它会让您进入下一步,看看getHtmlInput()
功能是否有效。
在那个注释中,你设置的小提琴显示getHtmlInput()
函数缺少某些代码或者对象缺少type参数。该功能似乎是为选择框输入选项,但没有选择标签。您需要在函数中初始化select(将正确的HTML <select></select>
标记添加到函数中)。我看到你已经通过最终方法参数$customtype=false
对此进行了排列,但看起来这也是未设置进入函数。如果你看一下小提琴,我们就会看到:
<label for="participant_question">Select menu question</label>
<option value="opt1"></option><option value="opt1">
永远不会输入<select>
。我不认为你的代码太过分了(虽然如果没有通过if检查,我不知道选项中的选项如何),我认为你需要测试你的对象以查看它们包含的内容 - - 确保他们有选项,确保他们有$customtype
并且它被设置为第一轮的选择。如果customQuestion对象具有正确的参数,则允许您正确测试。