Как исправить проблему с маршрутом в Laravel - PullRequest
0 голосов
/ 07 января 2019

Я хочу сделать онлайн-викторины с Laravel. Две таблицы курсов и вопросы, связанные друг с другом, пользователь может выбрать из названия курса на странице индекса, чтобы перейти к викторине для этого курса, после отправки он должен перейти к questions.show, идентификатор выбранного курса также там. Но когда я пытаюсь перейти на страницу индекса, ошибка происходит следующим образом: "" Неопределенная переменная: курс (представление: 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 голосов
/ 07 января 2019

Сделайте ваше form действие на route('question.store', $cource->id). Форму необходимо отправить в метод хранения с последующей resource маршрутизацией в 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> 
0 голосов
/ 07 января 2019

Форма должна идти внутри цикла 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

В вашем вопросе blade-сервер не знает, что такое $ course в вашем маршруте формы, потому что данные, поступающие с контроллера, являются $ курсы, и форма также должна находиться внутри цикла, чтобы переменная $ course также определялась в действии формы.

0 голосов
/ 07 января 2019

В вашем <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. Я изменил действие формы, так как не знаю, как выглядит ваш маршрутный файл. Я предположил, что ваш контроллер называется 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...