Laravel Nova была запущена еще в 2018 году, это быстрая панель администратора для ваших проектов Laravel, когда Тейлор объявил об этом, это сразу же заинтересовало меня, так как я боролся с созданием и поддержкой различных панелей администратора для разных проектов (Backpack, Вояджер, даже на заказ), что в долгосрочной перспективе оказывается технической обузой для производства.
Я начал использовать его с середины 2019 года в надежде, что он поможет стандартизировать панель администратора для моих проектов. Первоначально сообщалось о некоторых серьезных проблемах, и они все еще работали нестабильно, мне так и не удалось развернуть его для производственного использования до середины 2020 года (v3.x).

С тех пор я и моя команда использовали Laravel Nova для нескольких клиентских проектов и успешно развернули для использования в производственной среде в различных масштабах клиентов (даже на крупных предприятиях). С тех пор прошел год, и вот мой обзор Laravel Nova.

Использование

Прежде чем мы углубимся в обзор, вот некоторые из моих применений для Nova ...

В качестве панели администратора

Что ж, это то, для чего создана Laravel Nova: она позволяет вам быстро создать панель администратора для управления вашим приложением Laravel и его данными, предоставлять быструю аналитику и выполнять операции CRUD, вот как она используется в большинстве наших проектов.

Как CMS

Подобно тому, как работает Wordpress CMS, некоторые из наших проектов Laravel - это веб-сайты, которым требуется простой инструмент управления контентом для изменения контента на страницах внешнего интерфейса.

Как СУБД

Laravel Nova ближе к реальной СУБД, чем вы думаете, с базовой настройкой CRUD-операций на ваших моделях Laravel, она помогает пользователям легко манипулировать данными базы данных на основе ваших красноречивых моделей и их отношений.

(через год…) Мои выводы

Это не так дружелюбно по отношению к нетехническим специалистам

Laravel Nova построен на основе основных концепций Laravel моделей MVC и Eloquent и их взаимосвязей. Конечно, Laravel Nova не предназначена для нетехнических пользователей, ну, если вы хотите иначе, вам будет трудно объяснить.

В примере у нас есть две связи, как показано ниже:
Сообщение имеет много комментариев, но эта модель комментария может принадлежать многим другим модели (Отношения многие ко многим) кажутся нам с вами довольно понятными. Проблема возникает, когда вы пытаетесь объяснить пользователям, как прикрепить комментарий к модели публикации.

Что вообще означает «прикрепить»? «Разве я не могу просто написать комментарий рядом с сообщением», - спрашивает пользователь.

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

Есть также определенные части панели, которые мы также должны объяснить пользователям, например, линзы, если вы прошли Документацию Nova (с которой команда Laravel отлично поработала), вы, вероятно, поймете ее использование для нетехнический или даже новый разработчик, это иностранный термин, который может сбить их с толку, особенно он представлен в раскрывающемся списке Линзы, когда вы определили линзу для своего ресурса.

(Может быть, мы можем разделить разные представления ресурсов с помощью только вкладок? Разве это не менее запутанно?)

Скорость, да, все еще быстро.

Вы можете задаться вопросом, насколько быстро Nova работает в продакшене, у нас есть набор данных примерно из 100 тыс. Записей, загрузка его занимает меньше секунды. Помимо метрик для таких записей, это все еще довольно быстро, если у вас нет сложных соединений и запросов и не используются стандартные метрики, предоставляемые Nova. Благодаря Nova, построенной с использованием VueJS в качестве SPA, каждая страница загружается мгновенно, а кеширование и разбивка на страницы также помогают с загрузкой. У нас действительно нет миллиона записей, чтобы проверить время отклика, не стесняйтесь оставлять комментарии, если у вас есть опыт.

Мы хотели бы подчеркнуть, что когда мы начали тестирование Nova, мы столкнулись с проблемой медленной загрузки ресурсов в среде Homestead, но как только мы развернули ее на наших производственных серверах или запустили локальную среду на Valet с PHP7.4 и отключением XDebug, проблема, кажется, уходит.

(Примечание. Характеристики вашего сервера могут играть важную роль в скорости работы вашего приложения в целом)

Отлично для начала, сложно настроить позже.

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

  1. Более качественные диаграммы / аналитика на панели инструментов, они хотели еще более подробные диаграммы, такие как гистограммы, кольцевые диаграммы, расширенная аналитика с фильтрами диапазона дат, нам пришлось прибегнуть к созданию настраиваемого инструмента, который запускает ChartJS И пользовательские запросы.
  2. Настраиваемые элементы меню, вначале не было возможности настроить меню, если вы не замените его полностью новым инструментом только для этого раздела. Позже команда Laravel Nova создала функцию Групповые ресурсы, но мы не можем настраивать значки или даже использовать Lens в качестве ссылки на ресурс. В конце концов, большинство наших проектов Nova полагаются на этот пакет для создания полностью настраиваемых меню для панели администратора.
  3. Тематизация, хотя эта функция существовала с тех пор, как была представлена ​​Nova, при настройке некоторых экранов по-прежнему возникают некоторые проблемы, особенно если мы должны были создавать собственные инструменты, нам приходилось повторно использовать существующие классы HTML в Nova. поскольку Nova построена с использованием настраиваемой темы TailwindCSS (также доступны не все классы TailwindCSS). Наша тема должна быть построена в соответствии со стандартами TailwindCSS, и это просто болезненно, если вашему клиенту нужен Bootstrap / другие CSS-фреймворки в Nova.
  4. Пользовательские модальные окна. Одной из наиболее ограничивающих функций в Nova являются модальные окна. На самом деле нет возможности настроить модальные окна в Nova, например, клиент требует, чтобы мы отображали несколько ступенчатых (как у мастера) модальных окон, когда открывается модальное окно действие, мы находим его отсутствие настраиваемости модального окна разочарованием и в конечном итоге использовали вместо него настраиваемый инструмент (еще один настраиваемый инструмент, и нам нужно следовать классам TailwindCSS 🥲).

Управление согласованностью данных на производственном уровне

Учитывая, что у вас есть интерфейс, который общается с вашим сервером Laravel через API и панель администратора Nova, оба управляют базой данных с помощью моделей Eloquent (или даже необработанных запросов БД), как вы обеспечиваете согласованность данных?

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

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

Чтобы преодолеть это, мы просто внедрили событийную архитектуру. Учитывая простой сценарий потока платежей, при каждом обновлении модели Платеж, предположительно, нам необходимо обновить модель Транзакция на основе последнего статуса платежа и отправить пользователю электронное письмо. Итак, мы создали прослушиватель событий, который прослушивает событие PaymentMade, интерфейс будет запускать это событие всякий раз, когда платеж будет завершен. Между тем, в Laravel Nova администратор может вручную создать успешную запись платежа, мы создали Eloquent Model Observer для использования Nova, когда запись платежа создана () или обновлена ​​() и запустить событие.

Https://gist.github.com/elsodev/74bcc52892aeedd97250366655b9576a

Вывод

Если вы просто хотите получить простую настройку панели администратора для ваших производственных проектов Laravel, Laravel Nova может помочь вам сэкономить массу времени на разработку и ускорить работу; но имейте в виду упомянутые выше предостережения, я надеюсь, что мои идеи помогут вам быть готовыми к любым возможным (неприятным) сценариям, которые после некоторого времени запускаются в производственной среде.

Вкусности

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

Https://novapackages.com/
https://github.com/its-awesome/awesome-laravel-nova
https://www.youtube.com/watch? v = rgbdlVleH0M