garbuzivan/laravel-generator-package

Generator the composer package for Laravel

dev-main 2021-04-11 18:53 UTC

This package is auto-updated.

Last update: 2021-09-11 19:46:33 UTC


README

Scrutinizer Code Quality Code Coverage Build Status Code Intelligence Status

Laravel generator package - Генератор пакетов для Laravel

Главная задача пакета, автоматизировать генерацию кода для решения бизнес задач при разработке на фреймворке Laravel:

  • Миграции
  • (Опционально) Сиды (+factories)
  • Модель
  • CRUD интерфейс (без view для возможно переиспользовать в своих сценариях)
  • (Опционально) Интерфейс для Laravel Admin + route
  • (Опционально) Базовое API для работы с данными + route
  • (Опционально) API для передачи архитектуры формы и фильтров для автоматизации frontend + route
  • (Опционально) Базовые тесты

В отличии от других генераторов для Laravel, данный пакет:

  • Упаковывает код в отдельный composer package.
  • Возможность реализовать кастомные поля.

План работы

  1. Устанавливаем пакет garbuzivan/laravel-generator-package
  2. Настраиваем конфигурационный файл пакета, указав структуру и данные планируемых пакетов.
  3. Запускаем генератор и на выходе получаем сгенерированные пакеты в отдельных категориях готовые для публикации и последующего использования.

Install - Установка

composer require garbuzivan/laravel-generator-package

Конфигурационный файл

php artisan vendor:publish --force --provider="GarbuzIvan\LaravelGeneratorPackage\ServiceProvider" --tag="config"

Добавление ServiceProvider в config/app.php секция 'providers'

GarbuzIvan\LaravelGeneratorPackage\ServiceProvider::class,

Добавление миграций для словарей

php artisan migrate

Добавление стандартных словарей

php artisan db:seed --class="GarbuzIvan\LaravelGeneratorPackage\DataBase\Seeders\DatabaseSeeder"

Сборка пакетов из конфига

Все пакеты

php artisan lgp:make

Пакеты с конкретными vendor

php artisan lgp:make vendor_name

Конкретный пакет

php artisan lgp:make vendor_name/package_name

Настройка конфигурационного файла

fields - директива принимает массив классов, доступных в пакете полей (Fields). Заменяет стандартный набор.

Реализовать свое поле можно реализуя интерфейс FieldInterface или наследуя абстрактный класс FieldAbstract.

Пример:
    'fields' => [
        'text' => TextField::class,
        'string' => StringField::class,
        'integer' => IntegerField::class,
        'float' => FloatField::class,
    ],

generator - многомерный массив, элемент массива - настройки отдельного пакета для генерации.

name - имя генерируемого пакета

description - описание генерируемого пакета

vendor - vendor генерируемого пакета (аккаунт в GIT)

package - имя package генерируемого пакета (репозиторий аккаунта в GIT)

model - имя модели в генерируем пакете

table - название таблицы в БД к которой будет привязана модель в генерируем пакете

generator - позволяет отключить генерацию тестов (tests), сидов и фабрик (seed), api общего (api), api lля предоставления информации для автоматизации frontend (api_frontend) и компонентов необходимых для работы пакета в Laravel Admin (laravel_admin)

form - cхема генерации формы для добавления/редактирования записей. Конечный элемент название поля.

filter - cхема генерации формы фильтров. Конечный элемент название поля.

fields - многомерный массив. Ключ - это имя поля в БД. Особенности настройки полей смотрите ниже.

Пример:

    'generator' => [
        [
            'name' => 'Name package',
            'description' => 'Description package',
            'vendor' => 'garbuzivan',
            'package' => 'test',
            'model' => 'test',
            'table' => 'test',
            'generator' => [
                'tests' => true,
                'seed' => true,
                'api' => true,
                'api_frontend' => true,
                'laravel_admin' => true,
            ],
            'fields' => [
                'title' => [
                    НАСТРОЙКИ ПОЛЯ title
                ]
            ],
            'form' => [
                [
                    'title',
                ],
            ],
            'filter' => [
                [
                    'title',
                ],
            ]
        ]
    ]

Заполнение настроек отдельного поля

name_field_in_db - уникальное название в таблице базы данных

field - ключ используемого доступного поля из директивы 'fields'.

label - используемое имя / заголовок поля.

placeholder - placeholder для использования в html.

default - значение по умолчанию для поля.

index - Если установить true, то для столбца будет создан индекс.

fillable - добавляет поле в массив fillable создаваемой модели.

hidden - добавляет поле в массив hidden создаваемой модели для скрытия.

references - принимает 4 параметра для создания связи модели с моделью для другой таблицы. has - тип связи, model - путь с именем модели с которой будет создана связь, table - имя таблицы с которой будет создана связь, field - имя поля с которым будет создана связь.

param - по необязательное поле умолчанию null. Используется для передачи параметров для генерации некоторых field (например массив словарей для select форм или идентификатор словаря из БД).

filter - принимает параметры помогающие фильтровать и создавать проверку при работе модели:

filter['nullable'] - возможность записать в ячейку значение NULL

filter['unique'] - поле принимает только уникальное значение

filter['required'] - поле обязательное для заполнения

filter['max'] - максимальная длина значения для записи в БД

filter['min'] - минимальная длина значения для записи в БД

filter['mask'] - маска для проверки соответствия значения желаемому значению.

'name_field_in_db' => [
    'field' => 'text',
    'label' => 'Title',
    'placeholder' => 'Enter label',
    'default' => null,
    'index' => false,
    'fillable' => true,
    'hidden' => false,
    'references' => [
        'model' => 'App\Models\User',
        'table' => 'user',
        'field' => 'id',
        'has' => 'hasOne',
    ],
    'param' => false,
    'filter' => [
        'nullable' => true,
        'unique' => false,
        'required' => false,
        'max' => null,
        'min' => null,
        'mask' => null,
    ]
]