Перейти к основному содержимому

Админ-панель

Модули могут напрямую взаимодействовать с админ-панелью движка.

Для этого необходимо выполнить следующее:

  • Определить пункт в сайдбаре в админ-панели
  • Определить роуты админ-панели
  • Определить контроллеры
  • Определить view для каждой страницы внутри админ-панели.

Сайдбар

примечание

Для большей ясности, мы будем использовать ServiceProvider под названием AdminServiceProvider, который как раз отвечает за иниализацию модуля внутри админ-панели.

Сам пункт обязан иметь такую структуру (additional):

[
'icon' => 'ph-cube', // Иконка вашего пункта
'title' => 'mon_admin.title', // Название. Можно использовать как раз ключи переводов
'items' => [
[
'title' => 'Что-то',
'url' => '/admin/module/list' // Ссылка, куда ведет подпункт
],
]
],

Чтобы определить наши пункты в сайдбаре, достаточно в сервис провайдере вызывать один класс:

AdminServiceProvider.php
public function register() : void
{
AdminSidebarBuilder::add(
'additional',
[
'icon' => 'ph-cube',
'title' => 'Название нашего пункта',
'items' => [
['title' => 'Что-то', 'url' => '/admin/module/list'],
]
],
);
}

Аргументы функции add():

  • $key - Ключ в сайдбаре. Может быть main или additional.
  • $item - Массив с данными о пунктах
  • $permission - Право, которое необходимо для просмотра этого пункта

Роуты и контроллеры

После, нам нужно определить в нашем ServiceProvider'e наши админ-роуты.

Роуты

В роутах нам нужно постоянно проверять на определенные права пользователя, обращающегося к нашим роутам. Это можно сделать просто - вызываем middleware с указанием нашего права и потом пишем наши роуты.

Вот пример:

router()->group(function (RouteGroup $router) {

// Проверка прав на наш модуль
HasPermissionMiddleware::permission('admin.module');
$router->middleware(HasPermissionMiddleware::class);

// Наши роуты
$router->get('/list', [AdminViewController::class, 'list']);

$router->post('/add', [AdminApiController::class, 'add']);
}, 'admin/module');

Мы просто создаем роуты с префиксом admin/, ничего сложного.

Контроллеры

Контроллеры абсолютно никак не отличаются от других контроллеров. Пример реализации ниже:

AdminApiController.php
class AdminApiController extends AbstractController
{
public function __construct()
{
// Проверяем на CSRF
$this->middleware(CSRFMiddleware::class);
}

public function add(FluteRequest $request)
{
/** Делаем что хотим тут */
}
}

Интерфейс

Каждый интерфейс админ-панели должен делать @extends основного шаблона админ-панели, а потом добавлять свой контент. Пример:

admin.blade.php
@extends('Core.Admin.Http.Views.layout', [
'title' => 'Название нашей страницы',
])

@push('header')
<!-- Тут мы можем определить наши стили -->
@endpush

@push('content')
<div class="admin-header">
<h2>Заголовок страницы</h2>
<p>Описание нашей страницы</p>
</div>

<!-- Какой-то контент -->
@endpush

@push('footer')
<!-- Тут можно подгружать наш JS -->
@endpush

Безусловно, во все аргументы можно вставлять переводы через @t() или __().

Примеры реализации страниц можете посмотреть в app\Core\Admin\Http\Views\pages