我想和Laravel进行在线测验。 两张表的课程和问题相互关联,用户可以从索引页课程名称中选择要参加该课程的测验,提交后应该转到questions.show,所选课程的id也在那里传递。 但是,当我尝试转到索引页时,发生了如下错误: “”未定义变量:课程(视图:C:\ xampp \ htdocs \ bilsan \ resources \ views \ questions \ index.blade.php)“”
这是问题index.blade:
<form method="post" action="{{route('queations.show',$course->id)}}">
@csrf
<select name="courses_id" id="courses_id" class="form-control mt-3" style="max-width:250px; margin: auto;">
<option>Select Courses</option>
@foreach($courses as $course)
<option value="{{$course->id}}">{{$course->courses_name}}</option>
@endforeach
</select>
<div class="mt-5 list-group" >
<input type="submit" value="submit" class="btn btn-primary" style="max-width:150px; margin: auto;">
</div>
</form>
在问题控制器中:
public function index()
{
$courses =Course::all();
return view('questions.index',compact('courses'));
}
我使用Laravel 7 任何身体都可以帮忙!
答案 0 :(得分:2)
在您的<form>
中,您试图为路由动作设置course->id
,但是course
直到foreach循环才定义。尝试将其发布到更通用的路由(不需要course->id
)或确保视图从控制器获取course
。
编辑:我对您代码的建议
添加您的QuestionsController
:
public function store() {
$course = Course::findOrFail(request()->course_id);
return view('questions.show', compact('course'));
}
在questions.index
视图中编辑表单。我修改了表单的操作,因为我不知道您的routefile是什么样的。我假设您的控制器称为QuestionsController。我还将select
的名称修改为course_id
,而不是courses_id
。
<form method="post" action="{{action('QuestionsController@store')}}">
@csrf
<select name="course_id" id="course_id" class="form-control mt-3" style="max-width:250px; margin: auto;">
<option>Select Courses</option>
@foreach($courses as $course)
<option value="{{$course->id}}">{{$course->courses_name}}</option>
@endforeach
</select>
<div class="mt-5 list-group" >
<input type="submit" value="submit" class="btn btn-primary" style="max-width:150px; margin: auto;">
</div>
</form>
答案 1 :(得分:0)
表单应该像这样在foreach
循环内进入
@foreach($courses as $course)
<form method="post" action="{{route('questions.show',$course->id)}}">
@csrf
<select name="courses_id" id="courses_id" class="form-control mt-3" style="max-width:250px; margin: auto;">
<option>Select Courses</option>
<option value="{{$course->id}}">{{$course->courses_name}}</option>
</select>
<div class="mt-5 list-group" >
<input type="submit" value="submit" class="btn btn-primary" style="max-width:150px; margin: auto;">
</div>
</form>
@endforeach
在您的问题中,刀片不知道表单路线中的$ course是什么,因为来自控制器的数据是$ courses,并且表单也应位于循环内,因此$ course变量也可以在表单操作中定义。
答案 2 :(得分:-1)
将您的form
动作设为route('question.store', $cource->id)
。表单需要提交存储方法,然后在web.php中路由resource
<form method="post" action="{{route('queations.show',$course->id)}}">
@csrf
<select name="courses_id" id="courses_id" class="form-control mt-3" style="max-width:250px; margin: auto;">
<option>Select Courses</option>
@foreach($courses as $course)
<option value="{{$course->id}}">{{$course->courses_name}}</option>
@endforeach
</select>
<div class="mt-5 list-group" >
<input type="submit" value="submit" class="btn btn-primary" style="max-width:150px; margin: auto;">
</div>
</form>