0
votes

Comment réparer la question de l'itinéraire dans Laravel

Je veux faire des questionnaires en ligne avec Laravel. Deux tables Cours et questions connectées les uns aux autres, l'utilisateur peut choisir parmi le nom du cours de page d'index pour aller à quiz pour ce cours, après avoir soumis, cela devrait aller sur des questions.Show, l'ID du cours sélectionné également. Mais lorsque j'essaie d'aller à la page d'index, l'erreur s'est produite comme suit: "" Variable non définie: cours (vue: c: \ xampp \ htdocs \ bilsan \ ressources \ vues \ questions \ index.blade.php) ""

voici les questions index.blade: p>

      public function index()
{   
    $courses =Course::all();
    return view('questions.index',compact('courses'));
}


1 commentaires

Vous avez une erreur d'orthographe dans le nom de l'itinéraire (les questions doivent être des questions).


3 Réponses :


2
votes

dans votre code> Vous essayez de définir un cours-> id code> pour l'action de route, mais cours code> ne reçoit pas défini jusqu'à la boucle de Foreach. Essayez de le poster à une route plus générale (où il n'a pas besoin d'un cours de cours-> id code>) ou assurez-vous que la vue obtient le cours code> du contrôleur.


Edit: Mes suggestions sur votre code P>

Ajouter dans votre QuestionsController CODE>: P>

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


6 commentaires

@Dalianajeh Vous ressemblez comme vous essayez l'approche incorrecte, quel cours que vous avez sélectionné dans la liste déroulante, que cours-> ID sera envoyé dans votre formulaire.


Comme @stormhammer a dit, la meilleure façon de gérer cela serait de pointer vers une route générale qui accepte simplement une demande de demande dans la fonction, alors vous pouvez faire $ cours = cours :: FindorFail ($ Demande-> Course_id)


Comme PETAY87 dit, la meilleure façon d'aller ici (à mon avis) est de ne pas nécessiter d'identifiant de cours dans l'itinéraire et de le rendre général. Vous utilisez ensuite le code fourni par PETAY pour trouver le cours sélectionné et l'envoyer à vos questions.Show View.


Je change le formulaire en , cela devrait aller sur la même page, mais la page vide apparaît.


Avez-vous mis un retour sur le contrôleur pour afficher une page?


J'ai modifié ma réponse, je pense que vous auriez tout ce dont vous avez besoin maintenant. Si vous avez des questions dites le moi.



-1
votes

Créez votre Formulaire Action sur Itinéraire ('question.store', $ Cource-> ID) . La forme doit être soumise à la méthode de stockage suivie de Resource routage dans web.php xxx


1 commentaires

C'est exactement le même code que dans la question et fournit une aide supplémentaire à la personne qui pose la question.



0
votes

Le formulaire devrait aller à l'intérieur de la foreach comme ceci xxx

dans votre question, la lame ne sais pas ce que $ cours est dans votre itinéraire de formulaire car les données qui vient du contrôleur est de $ Cours et le formulaire doit également être à l'intérieur de la boucle de sorte que la variable $ du cours soit également définie dans une action de formulaire.


2 commentaires

Bien que cela fonctionnerait, cela rendrait l'option de sélection inutile car elle ne sera jamais une option unique pour chaque cours. Cela fonctionnerait mieux si vous utilisez quelque chose comme une carte ou une touche pour chaque cours pour sélectionner.


Ceci fait une boîte déroulante et soumettre un bouton pour chaque option !!