【问题标题】:Laravel - Undefined variable: modulesLaravel - 未定义的变量:模块
【发布时间】:2020-03-10 12:37:31
【问题描述】:

我正在尝试创建一个新模块 - 返回以下错误:

未定义变量:模块(查看:/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

模块控制器;

<?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 的新手。

谢谢。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    试试这个

     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'));
        }
    

    【讨论】:

    • 我可能会将$modules = Module::all(); 作为一个else,以免潜在地运行两个查询。
    【解决方案2】:

    你可以通过这样做来解决它

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

    当你需要在 Blade 中使用 foreach 显示循环时,你会怎么做,但是 列表可能是空的?你可能会写 if-else 语句 对吧?

    有一个名为@forelse 的“神奇”循环结构

    @foresee 循环本质上与 @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
    

    【讨论】:

      【解决方案3】:

      你的问题是这样的:

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

      大写!

      【讨论】:

        【解决方案4】:

        你在商店功能上犯了一个错误。

        存储后您应该重定向而不是返回视图。这里我已经提到了方式

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

        【讨论】:

          【解决方案5】:

          问题在于存储方法。存储模块后,您将打开索引刀片,但不会传递其中的所有模块。

          【讨论】:

          • 我没有看到 create 方法的问题,因为它返回了 create 刀片。但是,store 方法确实返回没有模块的索引,而不是执行重定向。
          • 这就是我在回答中所说的。 stackoverflow.com/a/60618000/9978078
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-29
          • 1970-01-01
          • 2015-05-15
          • 1970-01-01
          • 2019-03-01
          • 2023-03-05
          • 2018-01-26
          相关资源
          最近更新 更多