Проверка маршрутов и создание контроллера
Список маршрутов для админки:
Method | URI | Name | Description |
POST | admin/blog/categories | blog.admin.categories.store | Сохранение новой категории |
GET | HEAD | admin/blog/categories | blog.admin.categories.index | Страница со списком всех категорий |
GET | HEAD | admin/blog/categories/create | blog.admin.categories.create | Страница создания категорий |
PUT | PATCH | admin/blog/categories/{category} | blog.admin.categories.update | Страница обновления |
GET | HEAD | admin/blog/categories/{category}/edit | blog.admin.categories.edit | Страница редактирования. Отсюда будет осуществляться переход в update |
Теперь работаем с файлом CategoryController.php
. Приводим его в следующий вид:
<?php
namespace App\Http\Controllers\Blog\Admin;
use App\Models\BlogCategory;
use Illuminate\Http\Request;
class CategoryController extends BaseController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$dsd = BlogCategory::all();
$paginator = BlogCategory::paginate(5);
dd($dsd, $paginator);
return view('blog.admin.category.index', compact('paginator'));
}
...
Как видно, делаем наследование от BaseController
и в index
добавили инструменты работы с пагинацией. Пагинацию берем из BlogCategory
, который мы ранее прописали и который наследуется от ларавелевского Model
.
Далее можно по тестировать с помощью dd()
и посмотреть какие параметры есть у категорий и пагинации.
Примечание. Чтобы PHPStorm не отмечал нам метод
pagination
как отсутствующий, добавляем вBlogCategory.php
вот этоuse Eloquent;
и добавляем комментарий/** * BlogCategory * * @mixin Eloquent */
Создание шаблона
Создаем страницу с версткой для работы с категориями в админке. Для этого создаем файл по такому пути: project.loc\resources\views\blog\admin\category\index.blade.php
. Если каких то директорий не хватает - создаем их.
Добавляем в него следующее содержимое:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-12">
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
<a class="btn btn-primary" href="{{ route('blog.admin.categories.create') }}">Добавить</a>
</nav>
<div class="card">
<div class="card-body">
<table class="table table-hover">
<thead>
<tr>
<th>#</th>
<th>Категория</th>
<th>Родитель</th>
</tr>
</thead>
<tbody>
@foreach($paginator as $item)
@php /** @var \App'models\BlogCategory $item */ @endphp
<tr>
<td>{{ $item->id }}</td>
<td>
<a href="{{ route('blog.admin.categories.edit', $item->id) }}">
{{ $item->title }}
</a>
</td>
<td @if(in_array($item->parent_id, [0, 1])) style="color: #ccc" @endif>
{{ $item->parent_id }}{{-- $item->parentCategory->title --}}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
@if($paginator->total() > $paginator->count())
<br>
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<div class="card-body">
{{ $paginator->links() }}
</div>
</div>
</div>
</div>
@endif
</div>
@endsection
Здесь как и на этом этапе, мы наследуем этот шаблон от главного layouts.app
. и размечаем область content
. Здесь все просто - за основу берется шаблон app.index.php
из директории layouts
, а вместо секции content
будет подставлена эта верстка.
Основные действия:
- 8 строка. В этой кнопке
<a class="btn btn-primary" href="{{ route('blog.admin.categories.create') }}">Добавить</a>
мы в качестве ссылки указываем функцию Хелпераlaravel
, которая сформирует нам ссылку по необходимому маршруту. Ссылка на документацию - https://laravel.com/docs/7.x/helpers#method-route - 21-34 строки. Формируем вывод категорий.
Примечание. Чтобы работали клики по $item в PHPStorm мы прописываем в 22 строке в виде комментария php такую конструкцию
@php /** @var \App'models\BlogCategory $item */ @endphp
- Строка 26. Мы опять формируем ссылку, но уже на редактирование конкретной категории, при этом, передавая айдишник редактируемой категории вторым параметром в
route();
. - Строки 30-32. Мы определяем есть ли у категории родитель и если нет то можем, например, прописать какой-нибудь особый стиль для нее, в данном случае - это серый цвет
color: #ccc
. - Строки 41-52. Условие - если общее количество записей больше количество текущего набора (мы брали по 5, а всего 11) то формируем верстку с пагинацией.