Вы подняли очень интересный и фундаментальный вопрос. Вопрос относительно крупномасштабной архитектуры проекта и организации структуры папок (что является вторичным по отношению к архитектуре).
На сегодняшний день наиболее распространенным подходом к созданию архитектуры инфраструктуры CMS является использование шаблона MVC. Есть некоторые хорошие статьи о строительстве собственных рамок MVC, один из них Сборка MVC Framework с PHP .
MVC расшифровывается как Model, View, Controller. Вы можете назвать эти подходы как угодно - MVC, HMVC, MVP. Суть в том, чтобы изолировать отдельные компоненты вашей системы. «Контроллер» извлекает данные из «Модели» и отправляет их в «Просмотр», который отображает окончательный HTML. Вы уже внедрили «V» в вашем contacts.php
и «MC» в вашем contacts_class.php
. Итак, вы изолировали вид от модели и контроллера. Теперь вы можете легко изменить свой «Вид», оставив другие части без изменений.
Я не предлагаю вам слепо следовать MVC, MVP или какому-либо еще шаблону "MV". Это вопрос уместности, эффективности и вкуса.
Обычное динамическое веб-приложение может включать такие компоненты, как:
- Точка входа, скажем
index.php
- Вспомогательные библиотеки / классы
- Маршрутизатор запросов
- Модули, компоненты или контроллеры
- Шаблонный движок или возможно отдельные представления
Настоящее веб-приложение может включать любые другие компоненты, такие как обработчики событий, диспетчеры событий и ловушки, но на самом деле это нюансы. Что ж, позвольте мне представить это так, как я хочу представить:
Процедура работы с общей структурой выглядит следующим образом:
- Запрос браузера отправляется непосредственно в точку входа исполняемый файл / script (
index.php
).
- Сценарий точки входа загружает вспомогательные библиотеки, классы и выполняет некоторую дальнейшую инициализацию нашей среды программирования.
- URL передается экземпляру маршрутизатора запроса. Этот шаг может быть частью шага 2.
- Маршрутизатор запросов анализирует URL-адрес и отправляет операцию определенному компоненту, модулю или контроллеру.
- Компонент (или контроллер) обрабатывает перенаправленный запрос и отправляет данные в представление для визуализации.
Соответствующая структура папок проекта показана на диаграмме.
Я хотел бы предложить вам изучить, как реализованы другие структуры. Для начала рекомендуется использовать CMS / frameworks: CodeIgniter, OpenCart, Joomla 1.5 и Tango CMS.