Вернуть значения таблицы в шаблон находящийся внутри шаблона LARAVEL

Рейтинг: 1Ответов: 1Опубликовано: 19.02.2023

Всем привет! У меня есть таблица categories из которой нужно вытащить данные в шаблон categories.blade.php, который не используется как самостоятельная страница. Этот шаблон используется только внутри других шаблонов, например home и header.

У меня создан котроллер CategoryController и модель Category. В коде модели только присвоено имя таблицы - categories. Внутри шаблонов home и header у меня используется @include('categories') в нужном месте.

Код контроллера CategoryController:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Category;
class CategoryController extends Controller
{
    public function index()
    {
        $categories = Category::all();
        return view('categories', compact('categories'));
    }
}

Код шаблона categories.blade.php:

@foreach ($categories as $category )
<div class="catalog-main-menu__root">
<span class="catalog-main-menu__root-icon" style="background-image: url({{$category->image}});"></span>
<span class="catalog-main-menu__root-title">{{$category->name}}</span>
</div>
@endforeach

Код маршрута web.php

Route::get('/', function () {
    return view('home');
});

Я при переходе на страницу home, я получаю ошибку Undefined variable $categories.

Если в маршруте web.php задать прямой переход на шаблон categories, то он отображается без ошибок. Т.е. код представленный мною работает, но только если я напрямую перейду на страницу.

Подскажите что я делаю не так?

Ответы

▲ 2Принят
  1. Добавлять данные при инклуде нужной view (including subviews)
@include('categories', ['categories' => $categories])
  1. Добавлять при рендере (view composers)

файл: App\Providers\AppServiceProvider

use Illuminate\Support\Facades\View;


public function boot()
{
    View::composer('categories', function ($view) {
        $view->with('categories', Category::all());
    });
}