Создать систему на основе плагинов, такую как Wordpress с Laravel / PHP
Этот вопрос беспокоит меня уже довольно давно, я хочу создать cms, школьную систему управления, чтобы быть более конкретной, и что для меня важнее всего, это сделать этот системный плагин основанным на том, чтобы администраторы могли скачать и установить плагины прямо через их админ-панель, как WordPress.
Теперь я прочитал о WordPress Hooks, Actions и Filters, и, честно говоря, могу сказать, что я немного знаком с их функциональностью, но для того, чтобы применить ту же функциональность к Laravel App..., это немного сложно понять. по крайней мере для меня.
Я также искал этот вопрос и обнаружил, что почти все предлагают пакеты, но хотя пакеты могут отлично работать для других разработчиков, желающих использовать функциональные возможности пакета, они не могут быть легко установлены пользователем, не знакомым с какими-либо язык программирования, и это именно то, что я хочу в моем приложении.
Теперь, что я имею в виду, что и в Wordpress Actions and Filters, почти все, что нужно использовать в файлах тем Wordpress (чтобы сделать этот фрагмент кода гибким для добавления функциональности плагина), следует называть функциями, и вызывать это Функция Wordpress do_action() является своего рода обязательным путем, что, конечно, имеет смысл.
Таким образом, разработчики плагинов могут просто вызывать add_action() / add_filter() в своих файлах и помещать свои плагины в поток приложения. Так...
В основном то, что я спрашиваю здесь:
- Как применить такую функциональность к приложению Laravel?
- Есть ли более простой способ, чем вызывать все с помощью функции, такой как do_action()?
- Должен ли я написать какой-то модуль управления файлами для загрузки и обновления плагинов?
Опять же, я должен сказать, что я не очень знаком с WordPress способами достижения такого рода функциональности, поэтому я могу ошибаться в отношении некоторых описаний, которые я упомянул выше, но, пожалуйста, я ценю любые разъяснения по этому вопросу, если вы можете.
Заранее спасибо за любые идеи.
* PS Я пытался как можно яснее разобраться в проблеме, и я не ищу какой-либо конкретный метод для системы, которую я разрабатываю. Что я хочу, так это знать общие / лучшие методы (если есть лучший метод) для достижения такой функциональности, предпочтительно в Laravel, но общий алгоритм все равно будет высоко оценен.
Я знаю, что у многих людей один и тот же вопрос, и они решают одну и ту же проблему, поэтому, если вы просто дадите ссылку на полезную статью, это будет здорово.*
1 ответ
Я работаю разработчиком Wordpress очень долгое время, и у меня также есть достаточный опыт в Laravel... и, честно говоря, создание такого рода функциональности совсем не так сложно.
Как?
Прежде всего, вы должны понимать, что веб-приложение, которое вы будете создавать, будет иметь все функциональные возможности, но их можно включать / отключать только из внешнего интерфейса (панель администратора / панель инструментов). Другими словами, ваше приложение School Management System на самом деле имеет все предустановленные функции / возможности, но вы просто позволяете пользователям включать / отключать его. Это намного проще.
Так что, если, например. Вы хотите предоставить кого-то attendance management
Функциональность, вам придется предоставить администратору сайта, доступ для включения / выключения его.
Зачем?
Wordpress имеет встроенный пользовательский интерфейс для добавления / обновления плагинов. Но в Laravel все основано на коде, и поэтому я считаю, что это самый простой способ (особенно для того, чтобы сделать вещи в вашем приложении подключаемыми).
меры
- Сделать сайт с пользовательским интерфейсом и т.д...
- Создайте файл конфигурации и миграции, в котором будут имена всех плагинов, которые вы хотите разрешить / запретить пользователю.
- Сделайте команду синхронизации, которая будет синхронизировать все плагины в вашем приложении.
- Используйте его для рендеринга страницы из внешнего интерфейса и управления их состоянием из внутреннего интерфейса (is_active и т. Д. И т. Д.)
- Теперь, когда эти плагины активны, убедитесь, что пользователь (скажем, модератор, редактор) имеет доступ для управления ими, для чего вам, очевидно, придется создавать роли / разрешения и использовать Политики Laravel для таких вещей.
- Наконец, только администратор будет иметь включение / отключение записи и никто другой.
Для другой части, где вы хотите, чтобы люди выполняли свои собственные функции с фильтрами/действиями. Я бы сказал, что это полностью противоречит той части, где вы говорите Installing Laravel Packages isn't easy
, Что ж, если вы действительно хотите, чтобы разработчик нашел выход из этого, почему бы сразу не попросить их сделать пакет для вашего приложения? Хмммм.... Подумай об этом:)
Но даже тогда, если вы хотите создать такую функциональность, создайте простой класс, который пользователь может вызывать, и пользовательские его функции будут вызывать для своих собственных функций... Что-то вроде -> SMSPlugin::do_action()
, Но с другой стороны, для обновления или удаления плагина потребуется создать собственный магазин плагинов и попросить пользователей загрузить его. Затем вам нужно будет создать API, чтобы постоянно проверять наличие обновлений для всех установленных плагинов и тому подобное... Это действительно длинная процедура... И я не верю, что это возможно!
Надеюсь, я ответил на все. Дайте мне знать в комментариях, если у вас есть какие-либо сомнения:)
Я знаю, что это было 2 года назад, но сейчас вы можете достичь этого с помощью laravel с некоторыми пакетами:
Поэтому я думаю, что шаги будут:
Создайте новое приложение Laravel и добавьте несколько пакетов для базового интерфейса администратора и вещи, которые вам понадобятся:
Аутентификация ( https://laravel.com/docs/5.7/authentication)
- Роли и разрешения ( https://github.com/spatie/laravel-permission)
- Управление пользователями
- Модули ( https://nwidart.com/laravel-modules/v4/introduction)
На этом этапе вы должны настроить и написать пользовательский интерфейс для управления каждой вещью из каждого упомянутого пакета.
Так что я думаю, что это способ или, по крайней мере, некоторые пытаются сделать это в 2019 году:D
Счастливого нового года всем!
Для этого есть пакет, он поддерживает версию 5, еще не тестировал с 6:https://github.com/oneso/laravel-plugins