Финальное слово про Laravel Nova

Insolita
5 min readAug 15, 2021

Прошло уже без малого 3 года с момента написания первой ознакомительной статьи про коммерческий проект админки Laravel Nova. На данный момент актуальная версия v3.28.0, Апдейты с фиксами на протяжение всего этого времени выходили регулярно почти каждый месяц, а иногда и чаще… Но всё-таки покорить мир ей так и не удалось, хотя по-началу выглядело весьма перспективно. Несмотря на столь долгий срок, новых фич достаточно мало.

  • Доработали и улучшили работу со связями, появилась поддержка связей типа HasOneThrough и HasManyThrough, возможность добавить связь из формы в модальном окне для связей типа BelongsTo\MorphTo
  • Добавили возможность группировать ресурсы в боковом меню
  • Небольшие стилизации вида таблицы — обычная или компактная с меньшими отступами, а так же флаг для отображения границ колонок
  • Появилась возможность отображать ошибку, если в процессе редактирования ресурса он был изменен кем-то другим (можно и отключить)
  • Возможность включить polling обновлений таблицы с заданным интервалом, как постоянно, так и по кнопке в интерфейсе
  • Возможность включить предотвращение случайного ухода пользователя со страницы (закрытия вкладки.окна) во время заполнения форм.
  • Гибкое регулирование адреса редиректа после создания/редактирования/удаления записи
  • В ресурсе можно задать дополнительные методы afterValidation/afterCreatingValidation/afterUpdatingValidation Для дополнительной логики валидации,
protected static function afterValidation(NovaRequest $request, $validator)
{
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
}
  • Мелкие улучшения для фильтров, линз и метрик — в частности улучшение кастомизации названий, а так же множество багфиксов связанных с кешированием и сложными запросами со связями

Поля

  • Возможность задавать callback для установки значения по-умолчанию, установка placeholder и даже своя функция гидрации для модификации поля перед сохранением
Text::make('Name', 'name')
->fillUsing(function ($request, $model, $attribute, $requestAttribute) {
$model->{$attribute} = Str::title($request->input($attribute));
}),
  • Поле Badge для выразительного отображения статуса ресурса
  • BooleanGroupField для отображения набора чекбоксов, которые могут сохраняться в json-поле
  • Доработано CurrencyField для отображения цен, есть возможность задать локаль а так же минимальное-максимальное значение и шаг
  • В DateField и DateTimeField добавлена возможность отдельно указать формат дат для отображения и для сохранения
  • Появилось очень недостающее скрытое поле Hidden Field
  • Так же добавили KeyValueField для редактирования табличных данных из json-поля. Может работать с фиксированными ключами. позволяя редактировать только значения, а можно разрешить задавать и ключи и значения, и добавлять\убирать строки
  • Завезли поле Slug, сначала кривенько, потом доработали, работает норм даже с русским языком, так что необходимость в сторонних отпала
  • SparklineField позволяет отобразить маленький график прямо в таблице
  • StackField позволяет вывести данные нескольких полей, в том числе связанных в одной колонке таблицы

Специально для тех кто пользуется serverless- платформой Laravel Vapor были добавлены специфичные поля VaporImageField и VaporFileField

  • Появилась возможность задать выравнивание для отображения поля
Text::make('Title')->textAlign('center'),Slug::make('Slug')->from('Title')->->textAlign('right'),

Dashboards

Появилась возможность создавать свои дополнительные страницы Dashboards с набором метрик/карточек. Раньше можно было использовать только 1 общую страницу Dashboards

На этом с новыми фичами в общем-то всё. Остальные плюшки делегированы на сторонние расширения и собственные допилы. Включая даже языковые пакеты, основной источник для переводов https://github.com/coderello/laravel-nova-lang Но далеко не для всех языков поддерживаются актуальные данные

Была еще попытка https://github.com/franzdumfart/laravel-nova-localizations — но и там с актуальностью не намного лучше. Большая часть переведена, но дополнительные фразы придётся допереводить ручками.

Mobile-friendly тема так же “из коробки” не появилась. В целом по пакетам на https://novapackages.com около 670 пакетов, поиском на packagist.org находится порядка 1600 пакетов, но основная масса была выпущена еще в первый год, и многое поддерживаться перестало. Так что я уже давно делаю вывод, что интерес к nova со стороны разработчиков значительно упал. Особенно на фоне выхода Livewire. Ну и не могу не отметить существенным недостатком и, на мой взгляд, серьёзной стратегической ошибкой, что сделав ставку на самостоятельные кастомизации, Раздел документации по js весьма слаб, приходится ковырять исходники nova и других расширений, чтобы как-то разобраться. Так же явно недостаточно слотов для встраивания — если посмотреть исходники например пакета с breadcrumbs — автору пришлось переопределить все отображения, чтоб добавить строчку с хлебными крошками. Ну и даже для того, чтобы просто добавить свою ссылку в сайдбар требуется достаточно много телодвижений. В общем, если в 4-й версии занчительных улучшений не предвидится (что весьма сомнительно) — думаю вскоре Nova канет в небытие.
Так же не могу не отметить, что сейчас весьма интенсивно развивается open-source проект https://filamentadmin.com основанный на Livewire и хоть местами всё еще сыроват,вполне себе конкурентен и даже лишен многих недостатков Nova. Так же в качестве альтернатив можно взглянуть на очень гибкий и уже проверенный временем Laravel Orchid Или, так же упоминаемый мной ранее, французский проект Sharp

--

--

Insolita

#php,#yii,#laravel,#javascript, #python,#linux,#archlinux,#vue