Пакет для создания админки в проектах на Laravel

в 13:08, , рубрики: laravel, open source, packagist, php

Какой, по-вашему, самый ужасный и скучный этап в создании сайта на PHP? По-моему — это создание админки. Все эти однообразные формы, таблицы, большое количество практически одинаковых файлов, которое нужно не только создать, но впоследствии и обслуживать. Поэтому под каждый используемый мной фреймворк рано или поздно я создавал набор классов, облегчающих этот процесс.

И вот я добрался до Laravel. Представляю вам пакет, который поможет достаточно быстро создать админку и больше времени уделить фронтэнду.

Вы спросите, что же в моем «велосипеде» заставило меня опубликовать его на всеобщее обозрение? Для меня это его несколько сильных сторон:

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

Во-первых, конфигурационные файлы.

Я устал от конфигов, которые представляют из себя магическим образом созданный массив, в котором есть ключи с определенными названиями и текстовые значения этих ключей. Никакой вам помощи от IDE с автоподстановкой или подсветкой неверно указанных значений найти в коде проекта, где конкретно обрабатывается определенный ключ из конфига и что он делает — далеко не тривиальная задача. Да к тому же код пакета вам тут слабый помощник, документация — единственный ваш друг.

Поэтому я отказался от конфигов в виде массивов (php-массивов, yaml-файлов, неважно) и пришел к конфигам в виде php-кода. Вот вам небольшой пример описания модели «Country» из демо-приложения для использования в админке.

Admin::model('Country')->title('Countries')->with('contacts')->columns(function ()
{
	Column::string('title', 'Title');
	Column::count('contacts', 'Contacts')->append(Column::filter('country_id')->model('Contact'));
})->form(function ()
{
	FormItem::text('title', 'Title');
});

Не знаю, как вам, а мне кажется это намного более удобным для чтения, нежели массив с ключами, хотя по сути содержит всю ту же информацию.

Несколько плюсов данного подхода:

  • Ваша IDE будет знать контекст выполнения этого кода и сможет вам подсказывать, какие типы столбцов или элементов формы существуют и какие дополнительные параметры принимает конкретный элемент;
  • Опечатка в названии «ключа» автоматически приведет к ошибке, которую конфиг на массиве не сможет предоставить;
  • Парсить массив, содержащий столько информации, не самая приятная задача. Тут же ее просто не существует, в результате чего код становится чище.

Во-вторых, расширяемость.

Вы можете регистрировать свои собственные типы столбцов и элементы формы, которые впоследствии будут использованы в ваших моделях. Поэтому вы не ограничены исключительно тем функционалом, который создал я.

Также вы можете регистрировать свои собственные контроллеры для обработки определенных пунктов меню — и тут вы уже ничем не ограничены.

В-третьих, количество работы, которую необходимо проделать для создания админки.

Вам будет необходимо создать меню, а также создать описание каждой модели, для которой нужно создать админку. И это все.

Я создавал этот пакет для использования преимущественно в небольших проектах, имеющих множество слабо связанных между собой моделей. Как правило, основная их цель — отобразить данные во фронтэнде в соответствии с дизайном, а какая уж там будет админка заказчику не так важно, лишь бы выполняла основную цель — управление содержимым сайта.

исходники на GitHub | документация проекта| демо приложение

Автор: sleeping-owl

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js