Laravel - неопределенная переменная: модули - PullRequest
2 голосов
/ 10 марта 2020

Я пытаюсь создать новый модуль, возвращая следующую ошибку:

Неопределенная переменная: modules (View: / Users / kerrymckinney / Desktop / LearningHub / resources / views / admin / module / index.blade. php)

index.blade.php;

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
        <div class="col-md-8">
            <p>

                <a href="{{ route('admin.modules.create') }}"><button type="button" class="btn btn-success">Create Module</button></a>

            </p>
            <div class="card">
            <div class="card-header">Modules</div>
            <div class="card-body">
                <div class="table-responsive">
                    <table class="table"> 
                        <thead>
                          <tr>
                            <th>ID</th>
                            <th>Module Title</th>
                            <th>Course Title</th>
                            <th></th>
                            <th></th>
                            <th></th>
                          </tr>
                        </thead>
                        <tbody>
                        @foreach($modules as $module)
                            <tr>
                            <th scope="row">{{ $module->id }}</th>
                            <td>{{ $module->title }}</td>
                            <td>{{ $module->course->title ?? ''}}</td>
                            </tr>
                        @endforeach
                        </tbody>
                    </table>
        </div>
        </div>
        </div>
</div>
@endsection

ModulesController;

<?php

namespace App\Http\Controllers\Admin;

use App\User; 
use App\Role;
use App\Course;
use App\Module;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ModulesController extends Controller
{
    public function index(Request $request)
    {
        $modules = new module();

        if ($request->input('course_id')) {
                $modules = $modules->where('course_id', $request->input('course_id'));
        } $modules = $modules->get(); //passing modules with course_id through

        //$modules = $modules->all();
        return view('admin.module.index', compact('modules'));
    }

    public function create()
    {
        $courses = Course::all()->pluck('title', 'id');

        return view('admin.module.create', compact('courses'));
    }

    public function store(Request $request)
    {
        $module = Module::create($request->all());

        return view('admin.module.index', ['course_id' => $request->id]); //redirects to correct route by adding course_id in parameter 

    }

}    

Я не уверен, что у меня есть сделано неправильно, кто-нибудь может помочь? Я новичок в laravel.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 10 марта 2020

попробуйте

 public function index(Request $request)
    {
       if ($request->input('course_id')) {
            $modules = Module::where('course_id', $request->input('course_id'))->get();
        }else{
         $modules = Module::all();
        }


        return view('admin.module.index', compact('modules'));
    }
1 голос
/ 10 марта 2020

Проблема в методе магазина. После сохранения модуля вы открываете индексный диск, но не пропускаете все модули в нем.

1 голос
/ 10 марта 2020

Вы делаете ошибку в функции магазина.

После сохранения вы должны перенаправить, а не вернуть представление. здесь я упомянул способ

public function store(Request $request)
    {
        $module = Module::create($request->all());
        return redirect('admin/module'); //I assume you url is admin/module please make it as per your.

    }
1 голос
/ 10 марта 2020

Вы можете исправить это, выполнив

public function index(Request $request) {

        if ($request->filled('course_id')) {

             $modules = Module::where('course_id', $request->input('course_id'))->get();
        } else {

             $modules = Module::all();
        }

        return view('admin.module.index', compact('modules'));
}

И в своем клинке вы можете использовать @forelse директиву

Что вы делаете, когда вам нужно показать все oop в Blade с foreach, но список может быть пустым? Вы, вероятно, пишете оператор if-else вокруг этого, верно?

Есть «волшебная» структура l oop, называемая @ forelse

@foresee l oop по сути точно такой же как @foreach с одним дополнительным элементом, оператор else. Основное использование для этого, когда у вас есть пустой массив

@forelse($modules as $module)
      <tr>
          <th scope="row">{{ $module->id }}</th>
          <td>{{ $module->title }}</td>
          <td>{{ $module->course->title ?? ''}}</td>
      </tr>
@empty
<tr><td colspan="3"> No Records found </td></tr>
@endforelse
1 голос
/ 10 марта 2020

Ваша проблема была в следующем:

public function index(Request $request)
{
    $modules = new module(); //<------ It must be written new Module();

Прописные буквы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...