Переезд 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/backend

    • username: 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

    Upd. На данный момент система еще имеет статус Alpha версии и могут возникать ошибки в работе или недочеты, которые будут в последствии устранены. Баг репорты приветствуются.
    KodiCMS
    24,00
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 31

      0
      laravel.kodicms.ru/backend у вас тут эксепшн вылетает, к сожалению.
        +2
        Спасибо, исправил. К сожалению такое имеет место быть, т.к. еще alpha версия, но система периодически переустанавливается по крону.
          +1
          Извините меня. Это я сломал вашу админку переключив в настройках параметр сессия=apc.
          Я, однако, не понимаю, зачем это делать в админке, ведь это относиться к серверным настройкам. Я бы своим клиентам не стал бы давать админку с такими настройками, ведь большинство из них дураки. Они даже не знают где поменять тайтл для главной страницы. А уж переключение драйверов хранения сессии точно должно быть в системном конфиге который редактируется только программистом.
            +1
            Данные настройки планируется защищать через ACL модуль и давать права на их изменение только администраторам или еще каким либо ролям, ну а так да, я согласен, возможно стоит убрать. Именно этим и хороша обратная связь. Спасибо.
              +1
              Администратор=программист? Мне кажется к этим настройкам никто не должен иметь доступа, кроме программиста.
              И ещё, они не должны быть в админке только потому что можно всё сломать, а восстановить обратно уже не получится. Как сейчас и произошло.
        +1
        Доступ к файловому менеджеру открыт для всех, исправьте.
        laravel.kodicms.ru/api.filemanager?cmd=open&target=l1_Lw&init=1&tree=1&_=1432715839023
          0
          Спасибо. Модуль API также в будущем будет использовать API ключи которые будут генерироваться в админ панели и будут требоваться в том случае если пользователь не авторизован или для доступа сторонним ресурсам.
          0
          Добрый день!

          Если что, я там поиграл утром, добавил счётчик:

          metrika.yandex.ru/stat/dashboard/?counter_id=30572062

          Я без злого умысла — просто поиграться…

          Кстати, очень внешне понравилась админка, успехов вам!
            0
            Спасибо за счетчик, я совсем про него забыл. Добавил код также на внутренние страницы админ панели
            +3
            отличной архитектурой, которую можно было бы доработать под свои нужды,

            Ларавел хорош, удобно пользоваться, всё ок пока не придет нужда залезть в их исходники чтобы понять как расширить/переопределить что-то под свои нужды. Да и повсеместные __call() и, как следствие, невозможность «серфить» по коду в IDE не добавляют ощущения отличной архитектуры. Порой хочется грустно посмотреть в глаза таким архитекторам. Правда не так часто нужно лазить под капот.
              0
              ...Hello Kodi XSS?
              спасибо тому, кто порадовал с утра 8)
                +3
                Не благодари :)

                Виджеты > Меню > Редактирование виджета > Header menu
                В «Название» пишем Header menu]-->тут_script
                Проверил, другие поля XSS не пропускают.
                +2
                «Теория разбитых окон» в действии, коммент теряет свой opacity )
                Если сливаете, то разъясните по какой причине. Разработчики дали публичный доступ, решил протестировать.
                Инициатива наказуема (
                  –3
                  Ну собственно я не против твоего баловства, но это можно показать на внутренней странице и показать в чем проблема. На данный момент ты не единственный, кто может тестировать или хочет посмотреть систему, а если ее кто-то ломает, то для других появляется проблема доступа и всякие неудобства. Сломать всегда проще, чем сделать, но при этом всегда необходимо помнить о других. Мне вообще интересна проблема, которую ты показал, т.к. это явная недоработка, но хотелось бы видеть обратную связь немного по другому.
                    +1
                    довольно глупо выкладывать в паблик со словами "вот, посмотрите, какой я молодец" и надеяться, что все будут только смотреть, не трогать и хвалить "какой ты молодец". Особенно с таким абмициозно-детским посылом:
                    При написании своей CMS мне хотелось собрать из них все самое лучшее и соединить в одну.
                      0
                      Моя ошибка, я не уточнил, что на данный момент alpha версия, и в данный момент активно ведется перенос модулей со старой версии. По ссылке можно посмотреть результат переноса на данный момент времени, но это не окончательный вариант. Об этом также говорит лейбл alpha в логотипе админ панели.

                      P.s. я с большим уважением отношусь к баг репортам и по возможности стараюсь проблемы исправлять в кратчайшие сроки.
                    0
                    Имея доступ в админку любой может сломать сайт. Например, удалив все разделы. Даже взламывать ничего не надо. Какой в этом смысл?
                      0
                      Речь идет не о поломке сайта, а о безопасности ваших пользователей. Приведу небольшой пример.
                      У тебя есть доступ в административную часть с ограниченными правами, например корректировать и публиковать статьи на сайте. Злоумышленник получает доступ к твоей учетной записи, внедряет xss, ловит сессию администратора сайта и получает полный доступ в админпанель. Остается залить шелл и выгрузить дамп БД.
                        0
                        А зачем вы даёте доступ к админке злоумышленникам?

                        Не возможно защититься от всех. Приведу другой пример: работник ДатаЦентра вынимает hdd из вашего сервера, вставляет в свой комп и выгружает БД. Просто не давайте доступ к админке злоумышленникам.
                          0
                          А можно, я попробую пояснить, что имел ввиду тов. Invision70?
                          Так вот, он пытается донести мысль, что обычно CMS пользуются не только админы. Зачастую доступ даётся всяким контент-менеджерам, которые по уровню компьютерной грамотности и элементарных навыков сетевой безопасности находятся где-то в пределах погрешности от абсолютного ноля. Они используют простые пароли, они оставляют залогиненные сессии в паблик местах, они не лочат комп на рабочем месте и тд. и тп.
                          Так вот речь о том, что получив доступ к аккаунту такого нерадивого товарища можно через xss получить доступ и к админскому аккаунту.
                    0
                    А почему phalcon не рассматривали? :)
                      +1
                      Возможно потому что CMS должна вставать на 99,9% хостингов, включая shared, простым переписыванием файлов. Phalcon прекрасен, но не для таких «коробок».
                        0
                        Не знаю как Laravel 5, но 4 версия, по моему, вставала на shared хостинги с большим трудом и не желанием. Как сейчас с этим обстоит?
                          0
                          Без понятия. Но как минимум Laravel использует не столь специфические расширения PHP, как Phalcon, который им собственно и является. Поэтому уверен что Phalcon стоит на кол-ве хостингов стремящемся к 0, а то что нужно для того же Laravel можно найти много где.
                          0
                          Я в PHP не очень разбираюсь, просто интересно: зачем вообще сейчас нужны shared хостинги, когда есть, например, Digital Ocean за $5 в месяц.
                            0
                            Так не всякий сможет справится с администрированием, хотя конечно есть vds с панелями, но там тоже проблемы могут нарисоваться.
                              0
                              Собственно мы так и делаем и спокойно используем Phalcon и получаем все преимущества от этого. Но как правильно заметил предыдущий отвечающий, администрировать не все умеют.

                              Как минимум человек, который использует CMS, скорее всего не готов ставить дополнительные расширения PHP и т.п. Для таких CMS коробок инструкция сложнее чем «возьмите эти файлы и перепишите сюда», думаю равносильна забвению.
                          0
                          Лучше сделайте разовые демки для страждущих. Для каждого генерируйте на подомене отдельная установка (копируйте копию системы, да накатываете базу с префиксом например) и там пусть молодые таланты изливают свои мысли уровня «Здесь был Вася Пупкин все идите на три буквы!!!!!!!....».
                            –2
                            Пройдет 1-3 года. Появятся другие фреймворки… Ларавел забудут. И что? Опять переходить на новый? Вот чем чистый ПХП лучше.
                              0
                              Тролите? Ну-ну :)
                              0
                              С нетерпением жду!

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

                              Самое читаемое