如何在Laravel中解决路线问题

时间:2019-01-07 15:04:50

标签: php database laravel

我想和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  任何身体都可以帮忙!

3 个答案:

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