Переезд KodiCMS с фреймворка Kohana на Laravel 5
При написании статей на Хабре я заметил, что многим не по душе умерший Kohana framework и слышал много критики в адрес проекта по этой причине и задумался над вопросом:» Как быть и что делать с Kohana?», ведь фреймворк совершенно не способствует развитию CMS на протяжении года.
Первые мысли были о продолжении развития Kohana собственными силами. Первым делом в систему был интегрирован Composer, модули и плагины мигрировали в пакеты в репозиторий https://packagist.org/packages/kodicms/ и в инсталлятор composer добавлены типы пакетов https://github.com/composer/installers. После этого потратив немного времени на поиск наткнулся на проект Kohana54 (https://github.com/kohana54/core), разработчик которого решил привести все классы в соответствие стандарта PSR-4, но видимо оставил до лучших времен. По началу меня это не сильно тревожило, можно было попробовать закончить и за него, но через несколько дней я понял, что помимо самого ядра придется также переписывать и остальные стандартные модули фреймворка, а также и все модули CMS, что равносильно использованию другого, более современного фреймворка и решил окончательно завязать с Kohana.
Встал вопрос: «Какой фреймворк выбрать?» Laravel FuelPHP Symfony Yii2 Zend Framework 2 CakePHP Сравнение фреймворков может потянуть на целую статью, поэтому ограничусь только своим выбором, Laravel framework, который меня заинтриговал: своей простотой и более менее логичной структурой приложения, отличной архитектурой, которую можно было бы доработать под свои нужды, наличием кучи возможностей из коробки, которые могли бы помочь в реализации части переносимого функционала, удобная консоль, удобные инструменты работы с БД (миграция, сидирование), активное, живое сообщество, ну и самое главное фреймворк активно развивается, что, как я заметил по своему проекту, очень важно. Для многих людей 1 апреля — ассоциируется с днем смеха, а для меня — день рождения нового проекта — KodiCMS на фреймворке laravel. Именно в этот день был создан новый репозиторий https://github.com/KodiCMS/kodicms-laravel и добавлен первый коммит в него.Немного расскажу про структуру новой CMS. Многим известно что Laravel из коробки не имеет модульной структуры, а пакеты это не тоже самое, что и модули, поэтому первым делом был написан ModuleLoader, который помог с организацией модульной структуры и динамическим подключением модулей, просто указывая его имя в конфиге.
В итоге структура модуля имеет следующий вид config — конфиги приложения, могут быть перезаписаны из папки /config/ permissions.php — Служит для указания списка прав sitemap.php — Служит для указания страниц для меню админ панели behaviors.php Console Commands — расположение файлов консольных компанды database migrations — файлы миграции, будут запущены по команде cms: modules: migrate seeds DatabaseSeeder.php — если существует, то будет запущен по команде cms: modules: seed Helpers — вспомогательные классы модуля Http Controllers — контроллеры модуля Middleware routes.php — роуты текущего модуля, оборачиваются в namespace KodiCMS\{module} Observers — Наблюдатели для моделей Eloquent Providers ModuleServiceProvider.php — Сервис провайдер (наследуемый от KodiCMS\CMS\Providers\ServiceProvider), если есть, будет запущен в момент инициализации приложения resources js — JavaScript файлы, в этой папке происходит поиск js файлов по виртуальным путям /backend/cms/js/{script.js} lang — Файлы переводов для модуля, доступны по ключу названия модуля приведенного в нижний регистр trans ('{module}:: file.key') views — Шаблоны модуля, доступны по ключу названия модуля приведенного в нижний регистр view ('{module}:: template') packages.php — В данном файле можно подключать свои Assets (Media) пакеты Services — Сервисные контейнеры ModuleContainer.php — Если данный файл существует, то он будет подключен как системный файл модуля, в котором указаны относительные пути и действия в момент инициализации. Необходимо наследовать от KodiCMS\CMS\Loader\ModuleContainer Подробнее про модульность можно прочитать здесьПо аналогии с модулями планируется подключение плагинов сторонних разработчиков с единственным отличием, что активироваться они будут через административный интерфейс с возможностью их загрузки из репозитория.
Как говорится глаза боятся, а руки делают. После реализации модульной структуры началась процедура переноса стандартных модулей системы и реализация основных возможностей. И на данный момент по моим оценкам перенесено чуть более 60% функционала:
Добавление в Laravel модульной структуры Перенос ядра системы Перенос модуля «API» Перенос модуля «elFinder» Перенос модуля «Pages» Перенос модуля «Layouts» Перенос модуля «Snippets» Перенос модуля «Email» Перенос модуля «Cron jobs» Перенос модуля «Widgets» Перенос модуля «Dashboard» Перенос модуля «Users, Roles» Перенос модуля ACL Перенос модуля «Datasource» Перенос плагина «Hyrid» и интеграция его в систему с расширенным функционалом Реализация инсталлятора системы Реализация подключения плагинов, со структурой аналогичной модулям Изначально планировалось перенести весь функционал не менее чем за 6 месяцев, но что-то пошло не так и процесс пошел быстрее… Системой заинтересовались разработчики из группы в ВК http://vk.com/laravel_rus и на канале LaravelRUS, после чего энтузиасты стали предлагать помощь в разработке проекта одной из самых крутых OpenSource CMS на одном из самых крутых фреймворков.Зачем нужна еще одна CMS?! При использовании различных CMS я часто сталкивался с тем, что многие из них предлагают один и тот же функционал, но с небольшими отличиями. Т.е. по сути многие CMS загоняют пользователя в определенные рамки, будь то структура URL или размещение контента на страницах сайта. Многие из них имеют самописное ядро, которое либо сложно расширять, либо приходится долго изучать документацию, чтобы начать разрабатывать.При написании своей CMS мне хотелось собрать из них все самое лучшее и соединить в одну. Для начала я решил использовать один из популярных фреймворков и по минимуму вносить изменения в ядро, чтобы любой разработчик мог за кратчайшее время войти в процесс разработки. К тому же я не хочу CMS как у всех, только со своим именем, моя цель сделать некий конструктор, в котором можно конструировать собственные разделы (блог, новости и т.д.) посредством добавления в них полей нужных типов через админ панель, которые не жестко вшиты в код системы, а добавлялись бы с помощью плагинов сторонними разработчиками. Тоже самое и с выводом контента на страницы сайта. Чтобы каждый пользователь без особых знаний в программировании и ковыряния шаблонов сайта мог вывести необходимые данные, будь то список документов или меню сайта или обычный HTML.Дать возможность контент менеджеру использовать свой любимый текстовый редактор, который можно встроить в систему посредством API и полноценно использовать в админ панели.
Идей по системе море и все они реализуемые и большинство из них уже реализованы. Некоторые из них возможно нуждаются в доработке. Но все как обычно упирается в разработчиков. Поэтому приглашаем всех желающих присоединиться к разработке, тем более это поможет повысить свой опыт в работе с фреймворком Laravel, а также использовать свой опыт в дальнейшем.
Как обычно вы всегда можете посмотреть результат работы: Сайт: http://laravel.kodicms.ru/backendusername: admin@site.com password: password или username: test@test.com password: password или скачать и установить локально https://github.com/KodiCMS/kodicms-laravelБлагодарности Благодаря KodiCMS я открыл для себя мир добрых сервисов и людей, готовых предоставить свою помощь: P.s. В ближайшее время состоится первая online встреча по обсуждению проекта, на которой будет рассказано более подробно про систему, ее историю и о текущем состоянии https://vk.com/kodicms? w=wall-48395169_287%2Fall