Знакомство с Laravel Nova

Часть 2

[Часть 1]

Линзы

Попробуем сделать “линзу”.. или “выборку” пользователей, у которых скоро день рождения.

Команда создаст нам папочку Lenses в app\Nova с файлом BirthdaySoon.php он содержит метод query в котором мы должны реализовать запрос, метод fields — где мы описываем поля которые будем выводить, метод filters в котором мы можем задать фильтры для данной линзы, а так же uriKey содержащий часть запроса, по которому линза будет отображаться. Для нашей задачи реализация выходит вот такая

Чтобы добиться сорировки по полю birthday пришлось поковыряться — потому что по умолчанию в методе $request->withOrdering оно подставляет алиас таблицы основного ресурса

Осталось зарегистрировать линзу в ресурсе User — для этого он содержит метод lenses

При просмотре ресурса пользователь у нас появилось меню Линзы

Image for post
Image for post

При выборе попадаем на страничку

Image for post
Image for post

Действия

Попробуем добавить действие для пользователей. Архитектурно предполагается, что действия могут быть обработаны с помощью очереди — например какие-то emai-рассылки. Мы попробуем создать более простое действие — задать роль пользователя.

Создаст нам необходимый кракас, расположенный в директории app/Nova/Actions. Мы запишем свой нехитрый обработчик в методе handle

И, конечно, подключаем действие к ресурсу.

Сначала подумала, что не сработало, так как страница ресурса пользователей не изменилась. Но стоит только отметить какой-нибудь чекбокс, как появляется меню действий.

Image for post
Image for post

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

Image for post
Image for post

Резюме: Мощный и весьма функциональный инструмент.

Метрики

Nova нам предлагает 3 типа метрик — Оценочная метрика (Value Metric), Метрика прогресса (Trend Metric) и Сравнительная метрика (Partial Metric) . Пока у нас чего-то оценивать и измерять прогесс данных маловато. Попробуем сделать Сравнительную метрику соотношения полов

Созданный каркас предлагает нам методы calculate для расчета значений, cacheFor для указания времени кеширования и uriKey для роута

Для нашей задачи метод calculate будет таким

А регистрируются метрики в методе cards ресурса.
На нашей главной страничке пользователей появилась такая диаграммка

Image for post
Image for post

Кстати, чтобы не отображать в меню отдельный ресурс профилей, можно установить переменную в ресурсе

public static $displayInNavigation = false;

На этом пока закончим с ресурсом пользователи, и рассмотрим, что нам предложит Nova для кейса создания страниц с контентом.

Ресурс “Страницы”

Создадим новую миграцию, модель Page и заполним данными

Создадим новый ресурс

art nova:resource PageResource

Как показала практика, лучше классы и модели и называть по-разному.

Для полей ресурса устанавливаю настройки

Уже немного разобравшись на предыдущих задачах, на создание реусурса, фильтра по статусу, действия на установку статуса и метрику по количеству статей за период ушло не больше 15 минут.

Image for post
Image for post

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

Image for post
Image for post

Так же “визуальность” работает не очень хорошо, выделения цитаты и отметки курсивом еле заметно.

Так текст выглядит при просмотре

Image for post
Image for post

Маркдаун — редактор выглядит чуть-более проработано

Image for post
Image for post

Но вставка медиа-контента только маркдаун- разметкой далеко не всегда айс, вполне сойдёт для кодера и прошаренного юзера, но для контент-редактора уровня менеджера/офисного работника без допила малопригодно. Хочется надеяться, что работа в этом направлении еще будет продолжаться.

А наличие редактора с подсветкой синтаксиса, конечно, очень радует

Image for post
Image for post

Кастомизация

Это, пожалуй, наиболее сильная сторона данного продукта, позволяющая обойти немалое количество аналогов. Уже сейчас, спустя совсем небольшое время после релиза, на packagist можно найти немало пакетов — расширений https://packagist.org/?query=laravel-nova

С помощью

Позволяют сгенерить скелеты расширений совмещающих как фронт так и бек-части, соответственно для полей, карточек и инструментов (по сути своих специфических страниц, отличающихся от парадигмы стандартного CRUD), что позволяет админке быть по-настоящему гибким решением.

Так же нельзя не отметить предусмотренные возможности проверки прав доступа на каждый элемент.

В общем, не смотря на небольшую сырость, продукт достойный. И наверное, ольше ориентрированный на e-commerce/crm-erp продукты, чем cms

Upd.

Обнаружился еще один серьёзный недостаток, вызвавший немалое удивление

Image for post
Image for post
No-Responsive :-(

С респонсивностью у шаблона очень печально

Для желающих пощупать — есть демо (правда на самом первом релизе)
https://laramail.io/nova
логин:admin@laramail.io
пасс:admin12345

По хештегу #laravelnova в твиттере можно быть в курсе последних новостей

Так, анонсировано, что идет разработка над менеджером файлов и менеджером меню

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

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store