Эффективные админки вместе с yii2-crud-fields и yii2-crud

Выкладываем свои наработки
Ответить
eXeCUT
Сообщения: 12
Зарегистрирован: 2016.05.30, 17:48

Эффективные админки вместе с yii2-crud-fields и yii2-crud

Сообщение eXeCUT »

Здравствуйте, дорогие разработчики!

Хочу рассказать вам про серию инструментов для увеличения в несколько раз эффективности разработки и поддержки CRUD-ов. Данные расширения пишу несколько лет и ими никто не пользуется, поскольку похоже их никто не замечает, а чтобы заметили не достаточно просто взять и опубликовать расширение на yiiframework.com. А ведь хочется обратной связи и видеть смысл в продолжении их публикации. Поэтому решил донести до общественности про них здесь.

Разрабатываю на Yii с 2010 года и за это время реализовал несколько объёмных проектов. В процессе работы над ними я постоянно сталкивался с задачей по созданию CRUD-а для очередной таблички в БД. Чтобы это делать требовалось копипастить или генерировать кучу одинакового кода.

С каждым типичным полем вроде выпадающего AJAX-списка требовалось писать один и тот-же функционал:
  • Для списка записей:
    • Правила валидации.
    • Формирование ActiveQuery на основе параметров фильтров
    • Настраивать ActiveDataProvider для списка записей
    • Формировать настройки колонок списка
  • Для формы редактирования
    • Правила валидации
    • Формировать настройки атрибутов для формы редактирования
  • Для модели
    • Релейшены
    • Объявления виртуальных атрибутов
    • Переводы
Из того, что мне за это время попадалось для автоматизации данной работы - это генератор кода вроде Gii. Но такой подход имеет множество недостатков:
  • Дублирование кода конфигов: настройка валидации типичных полей, колонок, полей формы. Что в результате ведёт к умножению затрат на доработку и поддержку старого сгенерированного кода.
  • Дублирование функционала фильтрации и формирования запросов
  • Любое изменение структуры БД требует либо перегенерации кода, либо ручного копипаста
  • Процесс генерации не особо поддаётся тестированию. Покрыть тестами этот функционал затруднительно. Приходится всё вручную проверять
  • Сгенерированный код монолитный и сложно отвязать встречающиеся модули в одном разделе друг от друга
В результате родилась идея реализовать функционал для исключения этих недостатков. Некий инструмент, предоставляющий возможности создания CRUD-админок с помощью лёгкой настройки и без генерации кода, основанный на ООП подходе с минимумом кода.

Эта идея постепенно воплотилась в виде расширения execut/yii2-crud-fields. Оно позволяет создать админку для таблиц любой сложности с минимальными затратами и без дублирования кода.

Приведём пример настройки модели для типичного CRUD-а справочника с двумя полями id и name. Это делается несколькими строками в модели без генерации и копипаста, что значительно быстрее стандартного подхода:

Код: Выделить всё

   public function behaviors() {
        return [
            \execut\crudFields\Behavior::KEY => [
                'class' => \execut\crudFields\Behavior::class,
                'fields' => [
                    'id' => [
                        'class' => \execut\crudFields\fields\Id::class,
                    ],
                    'name' => [
                        'class' => \execut\crudFields\fields\StringField::class,
                        'attribute' => 'name',
                        'required' => true,
                    ]
                ],
            ],
        ];
    }
Подробности и примеры читайте в документации

Помимо этого есть расширение execut/yii2-crud, которое автоматизирует вдобавок ещё и процесс настройки контроллеров для CRUD-ов и их навигации, что позволяет уйти от монотонного процесса создания действий и представлений для них, упрощая тем самым вашу работу и проекты в разы.

Подробности про yii2-crud и примеры смотрите тут.

Чтобы увидеть всё в деле сделал оба способа реализации админок по управлению книгами и их авторами в виде пары расширений Yii2. Обычный execut/yii2-books-native и с использованием execut/yii2-crud execut/yii2-books. Там можно увидеть разницу, эффективность и упрощение одного и того-же функционала с помощью yii2-crud-fields. Если сравнить модель авторов, то она в реализации с yii2-crud-fields в 3 раза меньше.

Изображение

Ещё вдобавок сделал на базе функционала yii2-crud несколько взаимонезависимых модулей для Yii2 и собрал их воедино в виде CMS execut/yii2-cms. Есть пара проектов на её основе. Постоянно дорабатываю эти модули и использую их в разных комбинациях. В ближайшем времени планирую сделать демо-версию.

Более лучших аналогов yii2-crud-fields пока на PHP не встречал (Подскажите, если знаете). Пока есть только на Python, в Django самый удачный вариант увидел. Они похоже пошли той-же дорогой уже давно. Понимаю, что и в yii2-crud-fields есть некоторые недостатки и их нужно допиливать. Но все преимущества инструмента можно ощутить уже сейчас и без этого. Главное попробуйте!
Ответить