Как на Laravel делать приложения с формочками и CRUD операциями?
Мне часто приходится разрабатывать типичные веб приложения с множеством формочек и CRUD операций. Например всякие кастомные CRM или системы учета. Обычно это несколько десятков формочек, с сотнями разных полей и десятки таблиц. Каждая из формочек связана с одной или несколькими таблицами в БД.
Учебники по Laravel обычно пишут примерно одно и тоже. Для каждой модели надо: создать миграцию, сделать сидер, создать модель, создать контроллер с нужными операциями, сверстать формочку с полями, сделать валидацию (возможно черед отдельный request-класс), прописать маршруты, сделать тесты.. и т.д. Т.е. все это размазывается по разным файлам, классам.
Самое сложное, это то, что при любом изменении набора полей все это постоянно приходится править в разных местах. А при активной разработке и развитии проекта все это регулярно меняется.
Конечно это не проблема в при создании простенького блога, как это обычно рассматривается в примерах. Но в реальном не самом простом приложении, если для каждой модели это делать вручную, то это будет занимать кучу времени и приводить к постоянным ошибкам. В общем крайне неэффективно.
Как положено решать такие проблемы?
Раньше я использовал свои велосипеды которые позволяли декларативно описать все поля, формы, связи и операции в едином месте. Когда изменялись требования к приложению, достаточно было внести исправления в одном месте, и все остальное (модели, контроллеры, шаблоны форм...) автоматически подхватывали новую конфигурацию.
А какой правильный путь стоит использовать в Laravel?
Попробуйте OctoberCMS. В плане генератора админки - самая, пожалуй, user-friendly. Особенно для разработчика: laravel даёт, в некоторой степени, свободу творчества, CMS же на основе ларавель - регламентирует уже выработанный рабочий подход.
Когда ещё не существовало всяких laravel nova и laravel backpack (которые вроде платные оба), Сэмуель и Алексей запили "что надо" - скаффолдинг полей алминки, готовые контроллеры для форм, списков и фильтров.
По удобству кастомизации логики форм - октябрь далеко ушел. Можно многое организовать на событиях и расширить стандартную логику (зависимые поля, условное отображение полей).
Стоит отметить встроенную поддержку форм для pivot-данных в many-to-many реляциях.
Есть решениях более молодые заточенные под нативный ларавель - у вас есть выбор и раздолье для экспериментов.
Laravel backpack, имхо, менее удобен в разработке чем генераторы админки в октябре, возможно это дело привычки.
Раньше (очень давно) существовал такой, уже заброшенный пакет - Laravel Administrator. Я с ним работал - он быстрый, все поля на одном конфиге (один большой конфиг "для всего" - это выглядит не очень хорошо), интерфейс создаёт мелкий (что очень удобно для людей которые работают с большой кучей данных) - с интерфейсом октября менеджеры плюются работать (особенно те, которым надо очень много всего менять). LA было бы неплохо форкнуть и доработать в то время. Сейчас очень большая конкуренция в готовых решениях и внушительный выбор платформ генерации админки для ларавель.
Правильный путь не завязан на фреймворк, стоит создать какое-то логическое ядро (core модуль) и на его основе создавать модули-реализацию. Можно запилить приватный ларавелевский пакет, который объединит всю логику генерации и конфигурации кода в стандартизированном виде
Т.е. все это размазывается по разным файлам, классам.
Если данная концепция не устраивает нет смысла использовать Ларавел.
Самое сложное, это то, что при любом изменении набора полей все это постоянно приходится править в разных местах.
В IDE должна быть навигация по файлам, когда пишешь часть пути и тебе открывается список. Чтобы это работало наименования должны быть понятными и простыми.
если для каждой модели это делать вручную, то это будет занимать кучу времени
Кучу времени занимает поддержка велосипедов. В Ларавел новое поле добавляется за 5 минут. Миграция на добавление поля, добавить валидацию в реквест файл. Добавить инпут на фронт. Всё. Какой свой велосипед спасет от данных действий? Никакой. Везде нужно писать валидацию, добавлять поле в бд и на фронт.
и приводить к постоянным ошибкам
Чтобы не было ошибок нужно писать тесты. Т.е. перед добавлением поля пишешь всесторонний тест включающий валидацию и расслабляешься т.к. он приведет тебя к результату почти без необходимости думать. Плюс будет проверять в дальнейшем.
А какой правильный путь стоит использовать в Laravel?
Правильный путь указан самим Ларавел. См доки. Нужно использовать Ларавел и не писать велосипеды или писать велосипеды, а Ларавел оставить в покое)
– Кастомизация дефолтных стабов
– https://github.com/laravel-shift/blueprint
– Кастомные команды для artisan, которые автоматизируют многие шаги
– Кастомные пакеты которые берут на себя heavy lifting и предоставляют удобный API для работы
Вы же программист. Фреймворк – это не жесткие рамки, в которые вас зажимают. Это гибкая основа, на базе которой вы строите ровно то, что вам нужно. Так, как вам удобнее.