Неопределенная переменная: категории в Blade Laravel 6.4.0 - PullRequest
2 голосов
/ 07 ноября 2019

Я пытаюсь показать свои категории на странице карты сайта с контроллером ниже.

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-файла, где я использую шаблон переменной category.

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>

Я использую все способы, чтобы получить переменную и передачу, но ничего не получилось У вас есть какие-либо предложения?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Вы называете коллекцию «категории» в вашем контроллере. Чтобы использовать его на ваш взгляд, вы должны ссылаться на него с тем же именем.

Изменить это:

// 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
0 голосов
/ 07 ноября 2019

Чтобы быть более понятным, я сломаю ваш код, как показано ниже, и добавлю некоторые детали

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

Теперь давайте поймать его в представлении. Обратите внимание, что теперь $ категории доступны в представлении. Если вы передаете ['A' => $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>
...