Добрый день. Разрабатываю для себя собственную CMS систему и решил сделать все по человечески с использованием стандартов PHP. Изучая стандарты наткнулся на такую вещь как размещение файлов с привязкой к namespace по стандарту PSR-0 и столкнулся со следующей проблемой.
Согласно стандарту мои классы должны лежать по следующему адресу:
<путь к папке с библиотеками>/<имя поставщика>//<имя класса>.php
что соответствует классу <имя поставщика>\\<имя класса>
<имя поставщика> как я понимаю это компания которая поставляет библиотеку. Если компания моя, то там должно быть название моей компании, если это сторонний разработчик, то его. И тут меня все устраивает за исключением одного момента.
у меня ядро проекта структурно разбито на папки:
<путь к ядру>/lib/<имя поставщика>/ - тут лежат вспомогательные библиотеки от данного поставщика
<путь к ядру>/components/<имя поставщика>/<имя компоненты>/ - тут лежат классы для работы компоненты от данного поставщика
<путь к ядру>/modules/<имя поставщика>/<имя модуля>/ - тут лежат классы для работы модуля от данного поставщика
<путь к ядру>/plugins/<имя поставщика>/<имя плагина>/ - тут лежат классы для работы плагина от данного поставщика
и в идеале мой namespace должен строится как:
lib\<имя поставщика>\<namespace>\<имя класса>
modules\<имя поставщика>\<namespace>\<имя класса>
components\<имя поставщика>\<namespace>\<имя класса>
plugins\<имя поставщика>\<namespace>\<имя класса>
с точки зрения проекта это было бы лаконично, понятно и удобно в функциональном плане, но как я понимаю PSR-0 предписывает мне создавать другую структуру, следующего вида:
<путь к ядру>/<имя поставщика>/lib/ - тут лежат вспомогательные библиотеки от данного поставщика
<путь к ядру>/<имя поставщика>/components/<имя компоненты>/ - тут лежат классы для работы компоненты от данного поставщика
<путь к ядру>/<имя поставщика>/modules/<имя модуля>/ - тут лежат классы для работы модуля от данного поставщика
<путь к ядру>/<имя поставщика>/plugins/<имя плагина>/ - тут лежат классы для работы плагина от данного поставщика
что соответствует следующим namespace
<имя поставщика>\lib\<namespace>\<имя класса>
<имя поставщика>\modules\<namespace>\<имя класса>
<имя поставщика>\components\<namespace>\<имя класса>
<имя поставщика>\plugins\<namespace>\<имя класса>
все ли я верно понял?
имеет ли смысл в моем случае использовать стандарты PSR-0 или нужно забить на него и просто описать свой стандарт наименования namespace и их размещение в каталогах для разработчиков, ведь по сути файлы в проект будут попадать через инстолятор в админке который будет из архива извлекать файлы согласно XML инструкции и размещать файлы согласно внутреннему алгоритму.
Еще я поглядел в сторону PSR-4 и вроде как там такой проблемы нет, она позволяет реализовать то что я описал выше, но я могу ошибаться, так что про это тоже поясните пожалуйста.
PS: использовать composer не планирую, все библиотеки будут писаться мной, но планируется что для данной CMS системы могут разрабатываться сторонние модули и плагины.
В проекте есть строгая классификация папок, грубо говоря классы модуля должны быть в папке с названием модуля внутри папки modules, но как я понимаю придется мне пересматривать структур своего проекта и эту привязку к папкам или отказываться от PSR-0 стандарта и вводить свой стандарт для разработчиков, в общем жду ваших идей.
PSPS: небольшие пояснения о том что подразмевается под modules | components | plugins
components - генерируют по факту основной контент страницы. На странице обязательно есть один и только один компонент. Подставляется в контентБлок шаблона
modules - генерируют вспомогательный контент, например меню, баннер, блок с контактами и т.д. Подставляются в именные блоки шаблона. В каждом блоке могут отсутствовать модули. Количество модулей в блоке не ограничено.
plugins- не участвуют в генерации контента а выполняют функцию расширения функционала. Например подключение по необходимости JSбиблиотеки или реализация всплывающих окон и т.д. Чаще всего их функционал работает независимо от страницы или используется как зависимость для модуля или компоненты. Например без включенного плагина JQweryLoad не будут работать всплывающие окна написанные на jqwery если они используются в шаблоне модуля.
каждый элемент системы как и сама система будут реализованы на основе MVC