Facade Laravel в Modx 2/3
Приветствую! В этом видео я хочу поделиться с вами способом упрощения работы с Modx Revolution, а именно — о том, как подключить Laravel Facade.
Многие разработчики сталкиваются с определенными сложностями при работе с Modx в Ide, и я не исключение. В поисках способов оптимизации процесса я обратил внимание на Laravel Facade — мощный инструмент, который может значительно упростить и ускорить разработку.
В данном видео я поделюсь своим опытом подключения Laravel Facade к Modx Revolution. Я расскажу о шагах, необходимых для успешной интеграции, и поделюсь практическими советами в комментариях по устранению возможных проблем.
Надеюсь, мой опыт будет полезен для всех, кто стремится улучшить свой опыт работы с Modx и сделать процесс разработки более эффективным и приятным. Благодарю за внимание!
Использовал новый компонент mmxFenom для демонстрации работы в Modx 3 (но и для modx 2 то же будет работать)
На первый взгляд, может показаться, что это просто контейнеризация класса, но нет, это чуть больше, и куда удобнее.
Публикую код в сыром виде
github.com/webnitros/facade-modx
Потом можно и пакет создать на packagist.org/
У себя в проектах много где использовал Facade.
Сейчас больше вопросов про внедрение этого решения в MODX, так как не очень сильно разбирался, как работает MODX 3.
Видел, что добавлена контейнеризация в новой версии MODX, но все равно надо разбираться, как лучше интегрировать это решение.
Многие разработчики сталкиваются с определенными сложностями при работе с Modx в Ide, и я не исключение. В поисках способов оптимизации процесса я обратил внимание на Laravel Facade — мощный инструмент, который может значительно упростить и ускорить разработку.
В данном видео я поделюсь своим опытом подключения Laravel Facade к Modx Revolution. Я расскажу о шагах, необходимых для успешной интеграции, и поделюсь практическими советами в комментариях по устранению возможных проблем.
Надеюсь, мой опыт будет полезен для всех, кто стремится улучшить свой опыт работы с Modx и сделать процесс разработки более эффективным и приятным. Благодарю за внимание!
Использовал новый компонент mmxFenom для демонстрации работы в Modx 3 (но и для modx 2 то же будет работать)
На первый взгляд, может показаться, что это просто контейнеризация класса, но нет, это чуть больше, и куда удобнее.
Публикую код в сыром виде
github.com/webnitros/facade-modx
Потом можно и пакет создать на packagist.org/
У себя в проектах много где использовал Facade.
Сейчас больше вопросов про внедрение этого решения в MODX, так как не очень сильно разбирался, как работает MODX 3.
Видел, что добавлена контейнеризация в новой версии MODX, но все равно надо разбираться, как лучше интегрировать это решение.
Комментарии: 23
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Дело в том, что при переходе в addModifier здесь, мы попадём в фасад, а не в класс \Fenom, где этот метод и объявлен:
И это жутко бесит, когда пытаешь проследить логику работы.
Уж лучше вызывать нормально класс и подписывать его комментарием, зато никаких проблем с навигацией через IDE.
По моему, это гораздо проще и удобнее, чем городить фасады.
Но, в любом случае, спасибо за заметку. Кому-то, может, такое наоборот удобнее.
Есть такое
По этому в конце комментариев See оставляется
То же раздражала навигация.
Спустя какое-то время понял, как ориентироваться, привыкаешь к этому, после того как запомнишь, как функция вызывается и что она делает.
Для разработки чего-то нового, конечно же, не подходит, лучше обычным методом класс вызывать. Но для кода, который уже не первый год, вот тут выигрываешь сильно.
Зато увидел усложнение, в виде накрутки над классом фасада, который еще сильнее усложнит жизнь).
А может у меня проекты такие, где это не нужно, не знаю)
Разобрал более подробней работу Facade
Несколько вариантов представил для сравнения
core/src/Facades/Fenom.php
Для запуска
Судя по коду ты их просто положил в namespace MODX, так что да, так тоже работает.
Как раз про это писал что в modx 3 плохо разобрался.
Вспомнил про контракты.
Кто то все такие реализовал полноценную контейнеризацию ))
github.com/modxcms/revolution/commits/3.x/core/src/Revolution/Services/Container.php
Респект))))
Для modx @see \modX::getOption
Для pdoTools @see \pdoTools::getChunk
Cобрал пакеn по старинке через modExtra
Github: github.com/webnitros/facade-app
На модерацию уже отправил в modstore
Кому интересно, disk.yandex.ru/d/EtmO2tOPCYC6xA
Работает как в Modx 2 так и в 3 версии
Проверил на обоих версиях, одинаково отрабатывает код
С composer все еще могут возникать проблемы совместимости.
Еще событие добавил FacadeAppAddSingleton чтобы свои фасады можно было добавить github.com/webnitros/facade-app/blob/master/FACADE.md
К примеру вызов того же pdotools в версии modx 2 сделать по максимум чтобы все вызывалось через Facade
Тогда при установке на modx 3 этого компонента, была бы обратная совместимость. Опять же не прям всех классов и функций, но таких которые являются базовыми (наивное предположение конечно же))).
А судя по вашему коду, сервисы все еще из $modx достаются? Печально.
Честно говоря, тоже не люблю фасады и не пользуюсь ими и в ларавель. Выглядит как сотый уровень абстракции над абстракцией, без которой вполне можно обойтись. Лучшее враг хорошего, хотя это лично мое мнение.
github.com/modxcms/revolution/commits/3.x/core/src/Revolution/Services/Container.php
Её и использовал для подключение Facade в 3 версии modx
github.com/webnitros/facade-app/blob/2fe0344f87806bead554ba8f91e1d3d1ad62bb7f/Extras/FacadeApp/core/components/FacadeApp/elements/plugins/FacadeApp.php#L47C52-L47C53
Проблема в другом
это сам класс не позволяет делать, его нужно затачивать под такой вызов чтобы он инстанс вызывал который уже например инциализирован, чтобы постоянной инициализации класса занова небыло
Другой вариант контенеризации это сделать app() какой то, который будет обращаться к контенерам как будто
$modx->services->get('mmxFenom')
@Сергей Шлоков уже довольно давно, предлагал изменить getInstance,
и тогда можно обращаться вот так:
Кстати, где возможно, в свои проекты внедрил эту практику, работает отлично, без контейнеризации. Я не оценивал последствия, если это сделать стандартной сборке MODX 3 или 2, может там будут проблемы с процессорами. Но эта практика modX::getInstance('modX'), как и с Facade, упрощает написание кода.
Тогда можно будет сделать вот так
Ни какого прогресса не будет
github.com/modxcms/revolution/pull/16569
Дальше уже можно будет чем то другим обвешивать
Я в своё время его спросил, нафига добавлять контейнер Pimple, разработка и поддержка которого прекращена? Почему не взять развивающийся и более навороченный PHP-DI? Насколько я помню, он ответил какую-то чушь в стиле — зато легкая, а нам больше и не нужно. Даже Марк тогда присоединился к моему вопросу. Но Джейсон сказал, что переделывать он ничего не будет. Это было ещё до выпуска релиза MODX3, когда можно было хорошо почистить легаси.
github.com/modxcms/revolution/pull/16571#pullrequestreview-2061133420
— Скажите, больной перед смертью потел?
— Да.
— Это хорошо.
А вот вызов fenom, через чур усложнен, по этому хотя бы через Facade стоит прокинуть, как и многие другие сервисы.
Собственно Facade не требует ни какой дополнительно зависимости, mmxFenom уже устанавливает illuminate support где есть Facade
Есть же заготовка — просто используй.