Цель состоит в том, чтобы создать область администратора в моем проекте laravel. У меня есть вопрос о том, как структурировать представления и контроллеры для создания макета администратора с использованием компонентов laravel.
Скажем, у меня есть один контроллер (app/Http/Controllers/CategoryController.php
) на данный момент:
class CategoryController extends Controller
{
public function index()
{
return view('category.index');
}
}
Вид (resources/views/categories/index.blade.php
):
<x-app-layout>
Categories Index Page
</x-app-layout>
Базовый макет определен в resources/views/layouts/app.blade.php
.
Функционал внутри CategoryController
только для админов. Я хочу создать макет администратора, который наследует базовый макет. Просмотры категорий затем переходят в макет администратора. Макет администратора имеет боковую панель слева с навигацией. Навигация указывает на такие контроллеры, как CategoryController
и UserController
. Макет администратора будет отображать различные функции администратора.
Что я пробовал:
views/admin/admin.blade.php
:
<x-app-layout>
<h1>TEST</h1>
{{$slot}}
</x-app-layout>
и views/admin/categories/index.blade.php
:
<x-admin>
Categories Index Page
</x-admin>
Ошибка:
Не удалось найти класс или представление для компонента [admin].
Любые идеи, что я делаю неправильно здесь? Как следует структурировать представления для такого варианта использования?
@brombeer нет, это не обязательно компоненты
Создайте resources/views/layouts/admin.blade.php
, который выглядит примерно так:
@extends('layouts.app')
@section('content')
<div class = "navigation">
...YourNavbar...
</div>
<div class = "content">
@yield('content')
</div>
@overwrite
(Отредактируйте код внутри, чтобы он соответствовал тому, как вы хотите, чтобы ваша навигационная панель/контент выглядели)
Теперь ваш resources/views/categories/index.blade.php
должен использовать @extends('layouts.admin')
вместо @extends('layouts.app')
Обновлено: предполагается, что у вашего app.blade.php
есть @yield('content')
для отображения контента
Если кто-то ищет решение с использованием компонентов: laracasts.com/series/laravel-6-from-scratch/episodes/61.
Это не работает, потому что вам нужно создать файл компонента «AdminLayout.php» для макета администратора в: /app/View/Components, а затем использовать <x-admin-layout>
в ваших файлах представлений.
Должны ли это быть компоненты? Вы можете создать
resources/views/layouts/admin.blade.php
это@extends('layouts.app')