Php 如何解决Laravel中的路由问题

Php 如何解决Laravel中的路由问题,php,database,laravel,Php,Database,Laravel,我想和拉威尔一起做在线测验。 两个表格中的课程和问题相互连接,用户可以从索引页中选择课程名称,以转到该课程的测验,提交后应转到questions.show,所选课程的id也在那里通过。 但当我尝试转到索引页时,出现如下错误: “”未定义变量:课程(视图:C:\xampp\htdocs\bilsan\resources\views\questions\index.blade.php)” 以下是问题索引.blade: <form method="post" action="{{rou

我想和拉威尔一起做在线测验。 两个表格中的课程和问题相互连接,用户可以从索引页中选择课程名称,以转到该课程的测验,提交后应转到questions.show,所选课程的id也在那里通过。 但当我尝试转到索引页时,出现如下错误: “”未定义变量:课程(视图:C:\xampp\htdocs\bilsan\resources\views\questions\index.blade.php)”

以下是问题索引.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> 
我用拉威尔7 有人能帮忙吗

在您的
中,您试图为路线操作设置
路线->id
,但是
路线
直到foreach循环才得到定义。尝试将其发布到更一般的路线(不需要
课程->id
)或确保视图从控制器获取
课程


编辑:我对你的代码的建议

添加您的
问题控制器

public function store() {
    $course = Course::findOrFail(request()->course_id);
    return view('questions.show', compact('course'));
}
问题.索引视图中编辑表单。我修改了表单的操作,因为我不知道您的routefile是什么样子。我以为你的控制者叫问题控制者。我还将
select
的名称修改为
course\u id
,而不是
courses\u 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> 

@csrf
选课
@foreach($课程作为$课程)
{{$course->courses\u name}
@endforeach

将您的
表单
操作发送到
路线('question.store',$cource->id)
。表单需要提交到存储方法,然后在web.php中提交
资源
路由

<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> 

@csrf
选课
@foreach($课程作为$课程)
{{$course->courses\u name}
@endforeach

表单应该像这样进入
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
@foreach($courses as$course)
@csrf
选课
{{$course->courses\u name}
@endforeach

在您的问题中,blade不知道表单路由中的$course是什么,因为来自控制器的数据是$course,表单也应该在循环中,因此$course变量也在表单操作中定义。

您的路由名称有拼写错误(问题应该是问题)@DaliaNajeh看起来你在尝试错误的方法,你从下拉列表中选择了
course->id
,该方法将在你的表单帖子中发送。正如@Stormhammer所说,处理此问题的最佳方法是指向一个只接受函数中的Request$Request的常规路由,然后你可以做$course=course::findorfail($request->courses\u id),就像Petay87所说的那样,最好的方法是在路由中不需要
课程id
,只需将其设置为一般。然后,您可以使用Petay提供的代码查找所选课程,并将其发送到您的问题。显示视图。我将表单更改为,这应转到同一页,但是出现了一个空页面。您是否在控制器上放置了一个返回以显示页面?这与问题中的代码完全相同,并为提出问题的人提供了额外的帮助。虽然这会起作用,但会使SELECT选项毫无意义,因为它只会为每个课程提供一个选项。如果你为每门课程选择卡片或按钮,效果会更好。这是每个选项的“制作”下拉框和“提交”按钮!!
@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