【问题标题】:Undefined variable: categories in Blade Laravel 6.4.0未定义变量:Blade Laravel 6.4.0 中的类别
【发布时间】:2020-03-03 11:46:36
【问题描述】:

我正在尝试使用下面的控制器在站点地图页面上显示我的类别。

CategoryController.php

class CategoriesController extends Controller
{
    public function create()
    {
        $categories = Category
                  ::orderBy('name','desc')
                  ->where('parent_id', NULL)
                  ->get();

        return view('admin.category.create', compact('categories'));
    }
}

以下是我使用类别变量模板的 Blade 文件的一部分。

create.blade.php

<div class="form-group">
    <label for="exampleInputPassword1">Parent Category</label>
    <select name="parent_id" class="form-control">
        @foreach ($main_categories as $category)
            <option value="{{ $category->id }}">{{ $category->name }}</option>
        @endforeach
    </select>
</div>

我用各种方法来获取变量和传递,但没有一个不起作用你有什么建议吗?

【问题讨论】:

  • 你没有尝试在视图的那部分使用$categories
  • $main_categories 应该是 $categories

标签: php laravel laravel-blade laravel-6


【解决方案1】:

这里有两个选项。

选项 A:

您在 Controller 中将集合命名为 categories 并将其传递给视图。要在您的视图中访问它,您需要以相同的名称引用它。

改变这个:

// Your view is looking for a collection titled `main_categories`, which does not exist
@foreach ($main_categories as $category)
  <option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach

到这里:

@foreach ($categories as $c)
  <option value="{{ $c->id }}">{{ $c->name }}</option>
@endforeach

选项 B:

使用main_categories 作为集合名称传回数据

改变这个:

return view('admin.category.create', compact('categories'));

到这里:

return view('admin.category.create', [
    'main_categories' => $categories
]);

您可以在passing data to views here. 上阅读更多信息

【讨论】:

    【解决方案2】:

    为了更清楚,我将打破你的代码并添加一些细节

        class CategoriesController extends Controller
    {
        public function create()
        {
            $categories = Category
                      ::orderBy('name','desc')
                      ->where('parent_id', NULL)
                      ->get();
    // Your are passing variable but I change it as below to be more clear
    
         //   return view('admin.category.create', compact('categories'));
    //now you are passing the value to the view
              return view('admin.category.create', ['categories' => $categories]);
        }
    }
    

    现在让我们在视图中捕捉它。请注意,现在 $categories 在视图中可用。如果您传递['A' =&gt; $categories],则视图具有$A 变量,因此您应该调用您在控制器中定义的相关变量。

       <div class="form-group">
            <label for="exampleInputPassword1">Parent Category</label>
            <select name="parent_id" class="form-control">
    **{{-- In here you should pass $categories --}}**
                @foreach ($categories as $category)
                    <option value="{{ $category->id }}">{{ $category->name }}</option>
                @endforeach
            </select>
        </div>
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 2014-12-09
      • 2017-01-26
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2020-10-28
      相关资源
      最近更新 更多