你知道为什么会出现"Invalid argument supplied for foreach()"吗?



我有这个storeRegistration((来创建一个新的注册。但它出现了一个错误:

Invalid argument supplied for foreach()

在此 foreach 的 storeRegistration((:

if (isset($request->participant_question)) {
foreach( $request->participant_question as $key => $question ) { // error is here
$answer = Answer::create([
'question_id' => $request->participant_question_id[$key],
'participant_id' => $participants[$key]->id,
'answer' => $request->participant_question[$key],
]);
}
}

上面的每个内容是在答案表中插入用户对每个问题的答案。

你知道为什么会出现这个错误吗?代码似乎是正确的。

商店注册((:

public function storeRegistration(Request $request, $id, $slug = null)
{
$allParticipants = Conference::where('id', $id)->first()->all_participants;
$user = Auth::user();
$rules = [];
$messages = [];
if ($allParticipants == 1) {
$rules["participant_name.*"] = 'required|max:255|string';
$rules["participant_surname.*"] = 'required|max:255|string';
}
$validator = Validator::make($request->all(), $rules);
if ($validator->passes()) {
$total = Session::get('total');
$registration = Registration::create([
'conference_id' => $id,
'main_participant_id' => $user->id,
'status' => ($total > 0) ? 'I' : 'C',
]);
$participants = [];
for ($i = 0; $i < count($request->participant_name); $i++) {
$name = ($allParticipants) ? $request->participant_name[$i] : '';
$surname = ($allParticipants) ? $request->participant_surname[$i] : '';
$participants[] = Participant::create([
'name' => $name,
'surname' => $surname,
'registration_id' => $registration->id,
'registration_type_id' => $request->rtypes[$i]
]);
}
if (isset($request->participant_question)) {
foreach( $request->participant_question as $key => $question ) {
$answer = Answer::create([
'question_id' => $request->participant_question_id[$key],
'participant_id' => $participants[$key]->id,
'answer' => $request->participant_question[$key],
]);
}
}
return redirect(route('user.index', ['user' => Auth::id()]).'#myTickets');
}
else{
//dd($validator);
dd($validator->errors());
}
}

用户填写的 HTML 表单:

<form method="post" id="registration_form" action="http://proj.test/conference/1/conf-title/registration/storeRegistration">
<input type="hidden" name="_token" value="">
<div class="form-group">
<label for="participant_question">Phone?</label>
<input type='text' name='participant_question' class='form-control' required>
<input type="hidden"
name="participant_question_required[]" value="1">
<input type="hidden" value="1" name="participant_question_id[]"/>
</div>
<div class="form-group">
<label for="participant_question">Receive notifications?</label>
<div class='form-check'>
<input type='radio' name='participant_question[]' value='yes' class='form-check-input' required>    <label class="form-check-label" for="exampleCheck1">yes</label>
</div> 
<div class='form-check'>
<input type='radio' name='participant_question[]' value='no' class='form-check-input' required>    <label class="form-check-label" for="exampleCheck1">no</label>
</div>
<input type="hidden" name="participant_question_required[]" value="1">
<input type="hidden" value="2" name="participant_question_id[]"/>
</div>
<div class="form-group">
<label for="participant_question">File</label>
<input type='file' name='participant_question' class='form-control' required>
<input type="hidden" name="participant_question_required[]"  value="1">
<input type="hidden" value="3" name="participant_question_id[]"/>
</div>
<input type="hidden" value=""  name="participant_name[]"/>
<input type="hidden" value="" name="participant_surname[]"/>
<input type="hidden" name="rtypes[]" value="2"/>
<div class="form-group">
<label for="participant_question">Phone?</label>
<input type='text' name='participant_question' class='form-control' required>
<input type="hidden" name="participant_question_required[]" value="1">
<input type="hidden"  value="1"  name="participant_question_id[]"/>
</div>
<div class="form-group">
<label for="participant_question">Receive notifications?</label>
<div class='form-check'>
<input type='radio' name='participant_question[]' value='yes' class='form-check-input' required>    <label class="form-check-label" for="exampleCheck1">yes</label>
</div> 
<div class='form-check'>
<input type='radio' name='participant_question[]' value='no' class='form-check-input' required>    <label class="form-check-label" for="exampleCheck1">no</label>
</div>
<input type="hidden" name="participant_question_required[]" value="1">
<input type="hidden" value="2" name="participant_question_id[]"/>
</div>
<div class="form-group">
<label for="participant_question">File</label>
<input type='file' name='participant_question' class='form-control' required>
<input type="hidden" name="participant_question_required[]" value="1">
<input type="hidden" value="3" name="participant_question_id[]"/>
</div>
<input type="submit"class="btn btn-primary" value="Store Registration"/>
</form>

根据文档:

foreach 构造提供了一种迭代数组的简单方法。Foreach 仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,将发出错误

所以在前:

$participant_question = $request->participant_question;

然后你可以使用:

foreach( $participant_question as $key => $question ) {
...
}

我会重写它,但是:

Foreach 仅适用于数组和对象

因此,请确保$request->participant_questionarrayobject

真的是任何人的猜测$request->participant_question的内容会是什么。

您对各种表单字段使用相同的名称,有时作为数组,但有时不是:

  • 电话(未设置为阵列(
  • 通知
  • 文件

您需要使用唯一的名称属性来确保它们包含您认为它们包含的内容。

在 foreach之前检查$request->participant_question是否是数组。

if (is_array($request->participant_question)) {
foreach( $request->participant_question as $key => $question ) { // error is here
$answer = Answer::create([
'question_id' => $request->participant_question_id[$key],
'participant_id' => $participants[$key]->id,
'answer' => $request->participant_question[$key],
]);
}
}

相关内容

最新更新