Привет. Меня зовут Артем, я backend-разработчик в Пиробайте. Когда я только пришел в компанию, то узнал, что команда разрабатывает административные панели на основе самописного решения, созданного внутри студии. Когда-то за основу был взят шаблон Inspinia, и для него написана переиспользуемая логика на PHP, чтобы оперативно решать задачи. На прошлом же месте я работал с Orchid, и, как мне кажется, он показывал себя с наилучшей стороны, а главное — был прост и удобен как при разработке, так и при масштабировании. 

Поэтому я решил привнести немного комфорта и практичности, внедрив новую панель администратора в работу студии. Расскажу, почему Orchid — хорошая альтернатива двум другим решениям.

Ну а теперь к делу.

Почему решили перейти на Orchid с привычного решения? 

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

Отличие Orchid в том, что в нем есть и шаблоны, и переиспользуемая логика на PHP. То есть тебе не надо изобретать колесо, чтобы построить табличку и чарт, например. Там ты почти сразу пишешь бизнес-логику, не разрабатывая свой админковый «фреймворк». В нашем варианте для добавления каждого раздела нужно писать миграции, на Orchid же этого делать не пришлось — экономия времени. Добавить раздел, сконфигурировать его внешний вид в сайдбаре с меню — для этого нужна буквально пара строк кода.

Ну и многие бэкендеры меня сейчас поддержат: я не люблю фронт и все, что с ним связано. Будь то верстка, JS, стили и прочие милые сердцу frontend-разраба вещи. Orchid радует тем, что большую часть разработки не приходится даже задумываться о том, как это работает в браузере. И если есть возможность лишний раз уменьшить количество фронтовых задач без вреда для общего процесса разработки, то почему бы ей не воспользоваться?

Про Nova я скажу чуть позже, а пока…

Что такое Orchid и в чем его преимущества

Orchid — это Open Source панель администратора для проектов Laravel, сделанная Александром Черняевым и распространяемая по лицензии MIT. Основная философия проекта:

  • простота использования;

  • ориентированность на разработчиков;

  • инкапсуляция и переиспользование.

Одной из вещей, отличающих Orchid от остальных решений на рынке, является то, что он не ориентирован на CRUD. А во главу угла ставит работу с атомарными элементами и данными, но никак не соблюдение конкретного набора методов.

Также сама по себе платформа не является готовым решением. Как гласит документация — «работа предоставляется как есть». Это не решение для бизнеса, а набор инструментов, позволяющий разработчикам быстро и легко реализовывать интерфейсы.

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

Какие-то простые экраны списков, страницы создания и редактирования делаются в пределах 30 минут, вместо привычных 2-х часов. Проект, на котором мы впервые применили новую админпанель, разрабатывался в сжатые сроки, поэтому Orchid пришелся как никогда кстати. 

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

И еще хотелось бы подчеркнуть ее глубокую интеграцию с Laravel. Все, начиная с установки, кричит, что этот пакет и фреймворк созданы друг для друга. Все, что вам потребуется для установки Orchid — это стянуть пакет композером, запустить установку командой Artisan и схожей командой создать админа. И все — админпанель развернута и готова к работе.

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

Сама же архитектура админки упорно стремится вписаться в уже существующую и все ее элементы разработчик сможет легко распознать и найти. Ну и в довесок — она прекрасно работает со всеми свежими версиями фреймворка.

Из приятных возможностей могу отметить вот эти функции:

  • Модальные окна;

  • Уведомления;

  • Табы;

  • Реактивный интерфейс;

  • Графики;

  • Инструмент для тестирования;

  • Авторизация;

  • Роли.

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

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

Технологии, которые прячутся под капотом Orchid

За внешний вид тут отвечает Bootstrap. В представлении и объяснениях не нуждается.

За всю динамику отвечают два JS фреймворка — Turbo и Stimulus. Первый здесь только для того, чтобы создавать подобие SPA, за счет которого мы получаем очень приятный бонус в виде реактивного интерфейса. Его присутствие сводится к событиям, которые стоит использовать вместо стандартных JSсовых. А вот Stimulus уже полноценно выполняет свою работу и служит основной силой 2+2=22. 

Для сборки статики Orchid использует вебпак. Вся работа с БД выполняется за счет Eloquent.

Для полнотекстового поиска может быть использован пакет Scout от Laravel. Из нюансов — он со старта не имеет драйвера и его необходимо сконфигурировать. Из дополнительных возможностей есть Fortify от того же Laravel (если ваша авторизация нуждается в двухфакторности и повышенном уровне безопасности) и пакет для любителей Nova, который добавляет те самые ресурсы, которые работают аналогично продукту от Laravel.

Доступные элементы Orchid

  • Input

  • TextArea

  • CheckBox

  • Select

  • Relation

  • DateTime

  • DateRange

  • TimeZone

  • HTML-редактор

  • Markdown-редактор

  • Matrix

  • Редактор кода

  • Picture

  • Cropper

  • Upload

  • Group

  • Button

  • Dropdown

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

Немного о коде

Ниже я покажу создание Layout. 

Создание Layout с полями для ввода имени и почты
Создание Layout с полями для ввода имени и почты

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

В методе fields возвращаются нужные нам атомарные элементы, которые мы объявлем через их фасады, сразу указывая все необходимые атрибуты и требования, а также передавая локализованные плейсхолдеры. Да, несколько локализаций Orchid тоже поддерживает, по аналогии с Nova.

А ниже у нас объявление главного меню. 

Тоже через фасады интересующих нас объектов. Тоже с объявлением всех атрибутов. Тоже слизано у Nova.

И еще ниже покажу роутинг самой админки, который ничем не отличается от стандартного роутинга Laravel.

Роутинг админки
Роутинг админки

Разве что можно сразу прописать хлебные крошки для каждого конкретного маршрута.

Но даже учитывая все вышесказанное, у Orchid, как и любого инструмента, есть минусы.

Объективные минусы Orchid 

И первым сразу идет тот факт, что это Open Source проект. Его поддержка стоит на энтузиазме небольшой группы людей и Сани из Липецка. При таком раскладе лучше не думать, что будет, если ему вдруг надоест этим заниматься.

Вторым негативным моментом я бы назвал использующиеся в этом решении JS-фреймворки. Помните, я в начале писал про Turbo и Stimulus? Вот в этом и заключается минус. Они требуют хоть какого-то изучения, а значит времени, что не есть хорошо.

Третьим минусом является не самая подробная документация. Да, в общих чертах она неплоха и очень хорошо рассказывает о базовых вещах: как платформа работает и как с ней делать круто. 

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

Вытекающая из пониженной абстракции проблема — писать код придется больше, чем в умных высокоабстрактных решениях, которые за 3 строки ниндзя-кода сделают тебе 10 экранов разом. Но лично я считаю это плюсом. Чем меньше абстракция, тем больше прямого контроля за данными, а значит, больше уверенности в результате.

Также есть не то чтобы недостаток, но нюанс — у Orchid своя система работы с файлами, которая как две капли воды похожа на Spatie Media Library. И, если хочется ее использовать, то придется, скорее всего, отказаться от местного функционала. А если решить использовать то, что предлагает Orchid, то могут возникнуть проблемы с библиотекой Spatie Laravel Data, которая предоставляет удобные DTO (если кому-то потребуется валидировать через нее загружаемые файлы). Однако все это решаемо, если закопаться в папку vendor.

Ну а теперь выкатываем тяжелую артиллерию — Nova 

В чем она лучше Orchid:

  1. Коммерческий проект. Это означает гарантированную поддержку и ответственность разработчиков перед клиентом.

  2. Авторы — создатели Laravel. Если Orchid просто пытается казаться идеальным кусочком пазла, то Nova им является.

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

  4. Широкие возможности кастомизации стиля административной панели. 

  5. Приятный дизайн и широкий спектр возможностей из коробки.

  6. Киллер-фича — маркетплейс готовых решений, множество из которых бесплатны.

Но и такую замечательную админпанель не отпущу без какой бы то ни было критики

Минусы:

  1. Высокая абстракция ради высокой абстракции;

  2. Vue;

  3. Скудная документация;

  4. Приходится самостоятельно дорабатывать некоторые элементы\логику;

  5. Не бесплатно (мне просто не до чего докопаться).

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

Да, Nova позволяет в одном файле описать работу сразу нескольких экранов, это же позволяет сделать и пакет CRUD для Orchid. Но там он опционален, а здесь подобный подход принудителен. Если задача будет стоять таким образом, что для одной и той же сущности нам будут нужны различные экраны редактирования, то что надо будет делать в Nova, чтобы этого добиться? 

Orchid же это легко закроет — делай экраны уникальными столько, сколько хочешь. Можешь 5 видов наплодить, раскидать в разные группы ролей и 5 видов контентщиков или модераторов смогут по разному взаимодействовать с данными проекта.

Вторым минусом я поставил упоминаемый в отзывах Vue. Но тут ситуация схожа с начинкой Orchid и в целом аргументация та же. Не буду повторяться.

Третий минус — скудная документация. Плюс в некоторых моментах приходится самостоятельно дорабатывать логику. Ну и Nova не бесплатна.

Подводим итог

В целом, Orchid является тем, что написано на главной странице библиотеки. Это не решение под ключ. Это гибкое решение для разработчиков, что, как и в кастомном варианте, предполагает доработку под конкретные задачи. Только объем этой доработки значительно меньший. 

Так что Orchid — отличная альтернатива самой Nova и прекрасная замена для исторически сложившегося варианта по очевидным причинам.

А на этом все. Спасибо за ваше внимание и потраченное время. А для удобства я перенес все вышесказанное в таблицу.

Плюсы

Минусы

Orchid 

— Бесплатно

— Не приходится задумываться над фронтовой частью

— Глубокая интеграция с Laravel

— Работает со свежими версиями фреймворка

— Реактивный интерфейс

— Стильный, современный дизайн

— Прост и удобен в использовании и масштабировании

— Стильный, современный дизайн

— Прост и удобен в использовании и масштабировании

— Скорость разработки

—- Низкая абстрактность

— Поддержка проекта на энтузиазме

— Turbo и Stimulus требуют изучения

— Скудная документация

— Могут возникнуть проблемы с библиотекой Spatie Laravel Data, которая предоставляет удобные DTO

Nova

— Стабильная поддержка

— Авторы Nova — создатели Laravel

— Широкие возможности кастомизации стиля админки

— Есть маркетплейс с готовыми бесплатными решениями

— Платная

— Высокая абстракция ради высокой абстракции

— Vue

— Скудная документация

— Приходится самостоятельно дорабатывать некоторые элементы\логику

Кастомное решение

— Красивая верстка

— Порог входа ниже, чем в других админках

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

— Несложная кастомизация и добавление новых фич

— Нет документации

— Приходится разбираться в коде


И мне интересно узнать ваше мнение: что из админпанелей выбрали бы вы: Nova, Orchid или что-то еще? Почему?

Комментарии (17)


  1. cijic
    16.11.2023 11:34

    Так вас Артём или Саша зовут?) Или CEO пишет текст от лица backend'ера?


    1. pyrobyte
      16.11.2023 11:34

      Пишет backend'ер) Но с чужого акка. Так надо, чтобы статья попадала в блог компании


    1. catmodecode
      16.11.2023 11:34

      Так часто же делают. Редакторы по интервью и драфту собирают статью чтобы не было му хрю и прыжков с темы на тему


  1. Uzzzer2pac
    16.11.2023 11:34

    Здесь вам не AdminLTE тут. Надо попробовать Orchid


  1. censor2005
    16.11.2023 11:34
    +1

    Использовал Filamentphp на нескольких проектах. Практически все потребности закрывает, имеет множество плагинов, можно писать свои. И бесплатно )


  1. MyraJKee
    16.11.2023 11:34

    Интересно, у нас в компании от орхид решили отказаться, потому что бэкэндеры не хотят заниматься фронтом ни в каком виде.


    1. pyrobyte
      16.11.2023 11:34

      А на что перешли?


    1. waynelogic
      16.11.2023 11:34

      Не подскажете - а на что перешли?

      Просто мы сфере Laravel использовали October CMS очень долгое время и как основную систему. Но с этого года начали полностью переходить на голый Laravel. Orchid пока что был только в одном проекте, его визуальная составляющая оставляет желать лучшего - как будто в 14-16 год откатился. На последних проектах используем Filament.


      1. dmi3mart
        16.11.2023 11:34

        Но с этого года начали полностью переходить на голый Laravel.

        А чем октобер не устроил? Лучшей админки не существует, имхо)


  1. Rchee
    16.11.2023 11:34
    +1

    Как раз в этом году переводили проект с Orchid на Nova. Для коммерческого проекта стоимость Новы растворяется, а стабильность работы, поддержка — перекрывают плюсы Orchid'а. Ну и интерфейс Новы, конечно, не так режет глаз, хотя местами тоже режет.


  1. feels_pepe
    16.11.2023 11:34

    После того как начали использовать laravel nova становится не удобно поддерживать проекты под inspinia


  1. ddem
    16.11.2023 11:34
    +1

    Несколько проектов сделал на orchid, согласен про недостаток js и недостаточную документацию, в остальном удобно, пока делаю в рамках возможностей админки.


  1. madscout
    16.11.2023 11:34
    -1

    Советую попробовать moonshine


  1. zelsystem
    16.11.2023 11:34

    Пилил на обоих платформах проекты. В целом согласен - Основная претензия к Orchid это очень слабая документация, и Turbo.
    Если решение проблемы с Nova я быстро нахожу на SO и других ресурсах, то для Orchid есть чат в телеге, там все очень милые но явно не тянут за поддержку) Я бы на их месте брал деньги за платную поддержку с гарантированным временем ответа чтобы проект не вставал из-за каких-то неожиданностей.
    С Turbo все просто - в трех админках из трех в итоге мы его вырубили. Да, скорость стала чуть ниже, но кастомный JS начал корректно работать.
    Поэтому пока пилим на Nova, но посматриваю на Laravel Filament как альтернативу в будущем.


    1. agoalofalife
      16.11.2023 11:34

      А какие вещи были не понятны или слабые в документации?


      1. zelsystem
        16.11.2023 11:34

        Привет. Ну например мы так и не смогли подключить виджет внешнего чата который всегда должен висеть на всех страницах. Он при первом старте работает, а при переходе по страницам init уже не происходит. Если отключить ajax подгрузку то начинает работать. Совет из документации (turbo:load) не помог.

        Еще очень мало документации по созданию своих компонентов, а поскольку их очень мало на Github то по коду не смог разобраться. У nova для этого так же есть команда которая сразу создает компонент, прописывает его куда нужно и я просто пишу логику и фронт на Vue.

        Очень бы хотелось больше примеров по Listener - вроде опция прикольная, но я так и не разобрался как отловить изменение одного поля в другом, в итоге писал свои костыли.

        И вторая проблема - она характерна для многих, нам нужны "чистые страницы" чтобы мы могли туда загружать свой фронт (на Vue или React). При этом чтобы левая часть не ломалась. В Nova для этого есть https://nova.laravel.com/docs/customization/tools.html
        Т.е. она сама одной командой собирает мне скелетон фронта на Vue и я там создаю логику и дизайн который нужен мне. При этом у меня остается доступ к API Laravel и Nova. Это максимально удобный функционал для меня.
        У вас есть browser, но это реализация Iframe - мне она не сильно понравилась. А реализация через Screen layout, да там можно подключить Blade а в нем все что мне нужно - но Vue валился с ошибками когда я его подключал.

        Пока все это писал и вспоминал посмотрел документацию - вижу многое изменилось, в англоязычной версии даже появились упоминания Vue Wrapper. Это очень хорошо - еще не раз думаю что вернусь к вашему продукту.

        Я думаю что большинство проблем связано с моим (на момент работы с Orchid) небольшим опытом работы с Laravel (у меня несколько иной стек тогда был).
        Вы делаете классный продукт (и подкаст;) удачи вам и сил!


        1. agoalofalife
          16.11.2023 11:34
          +1

          Спасибо за развернутый ответ, будем конечно улучшать!