Перейти к содержанию

(PHP)1. Общая структура проекта

Last updated on 10.04.2021

структура проекта

Создание ядра для системы управления сайтом (CMS) требует немало времени. Особенно если разработчик это делает впервые. Ядро — это фреймворк(CMF). Конечно создание свой CMS у многих вызывает недоумение. Какой смысл это делать, если уже существует множество готовых решений?

Какой толк от собственной CMS?

Конечно на первый взгляд его нет. Но на самом деле это не так. Разрабатывая свою CMS разработчик, в первую очередь, начинает понимать как устроено всё изнутри. Он изучает уже существующие решения. В процессе пытается понять, стоит ли их использовать или нет. Кроме того анализируя чужой код, разработчик постепенно совершенствует свои навыки. Ему становится проще использовать нововведения.

Но самое главное состоит в том, что разработчику становится проще понять, как устроены другие системы и фреймворки.

Запуск локального сервера

Всё начинается с установки локального сервера. Для этого я использую OpenServer. Сразу замечу, что локальный сервер использует следующие модули:

  • Apache 2.4
  • PHP 7.4
  • MYSQL 8.0

Сам процесс установки описан в официальной документации. Поэтому я его опускаю. После установки локального сервера, заходим в папку «место установки OpenServer\domains\localhost». Там создаём новую папку. Назовём её … Впрочем можете дать ей любое имя. Запускаем Openserver.

openserver
Openserver

Переходим в настройки. В открывшемся окне выбираем вкладку «Домены».

openserver-settings
OpenServer настройки

Выбираем ручное управление доменами. Теперь добавим наш домен. Для этого прописываем любое имя домена, а затем выбираем папку домена (ту папку, что вы создали ранее). Жмём кнопку добавить.

openserver-domain
Добавляем новый домен

В итоге наш домен добавиться в список локального сервера. Нажимаем кнопку «Сохранить». Перезапускаем сервер. Теперь достаточно ввести в браузерной строке: «http://имя сохранённого вами домена». Но поскольку папка пуста, то в окне браузера вы увидите страницу «Index of /».

Структура проекта

Для дальнейшей работы нам понадобится редактор php кода. Лично я использую PhpStorm. Вы же можете использовать любой иной редактор. Для удобства создаём в редакторе новый проект и привязываем к нему папку нашего домена. В PhpStorm это делается так:

new-project-phpstorm
Создание нового проекта

В открывшемся окне выбираем тип проекта и указываем нужную папку:

new-project-folder
Привязываем папку к проекту

Нажимаем кнопку «Create». Появится окно в котором надо выбрать «This Window». Проект создан. Теперь добавим в него следующие папки:

  • cache — необходима для хранения кеша любой нужной информации
  • config — будет хранить основные конфигурационные файлы. В этих файлах будут храниться настройки, которые понадобятся нашему ядру.
  • core — расположится само ядро
  • log — будет хранить log-файлы
  • public — расположится файл «index.php». Это точка входа в наше ядро.
  • upload — будут храниться все загружаемые файлы

Теперь если в браузерной строке ввести путь к нашему домену, то мы увидим:

hydra-loc
Предварительная структура проекта

Мы можем перейти в каждую папку. А это плохо. Чтобы это исправить, создадим в корне нашего проекта файл «.htaccess». Это специальный служебный документ, который содержит целый ряд инструкций, указывающих веб-серверу Apache и похожим серверам, что делать, как это делать и куда дальше отослать полученный запрос.

Прописываем инструкцию следующего содержания:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
</IfModule>

С её помощью мы запрещаем просмотр всех папок нашего проекта. Заметьте мы не блокируем доступ к ним, а просто запрещаем их просматривать. Теперь папке public, проекта, создадим файл «index.php». запишем в него следующий код:

<?php
echo "Test";

Инструкция echo выводит текст «Test» в окно браузера. Чтобы этот текст отобразился следует в адресную строку браузера ввести:

http://имя вашего домена/public/

А можно отобразить этот текст при вводе только доменного имени? Да можно. Для этого файл .htaccess следует дополнить некоторыми инструкциями. Итоговый результат будет такой:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
# Включаем перенаправление с сервера Apache
RewriteEngine On
# Если запрос не содержит обращение к папке "public"
RewriteCond %{REQUEST_URI} !^public
# перенаправляем в эту папку
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Однако при вводе в адресную строку «http://имя вашего домена», появится сообщение «Internal Server Error». Поэтому в папке public нашего проекта тоже создаём файл «.htaccess». В нём прописываем:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Если это не директория, то запрос передаётся  в файл index.php
    RewriteCond %{REQUEST_FILENAME} !-d
    # Если это не файл, то запрос передаётся  в файл index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    # Перенаправляем запрос в файл index.php
    RewriteRule ^ index.php [L]
</IfModule>

Вот теперь при вводе в адресную строку «http://имя вашего домена», в окно браузера выведется слово «Test».

Таким образом на данный момент структура проекта такова:

hydra-project
Окончательная структура проекта

Ну что же, теперь можно начинать разработку самого ядра. В целом структура ядра будет выглядеть так:

hydra-core-structure
Структура ядра

В процессе разработки я внесу некоторые изменения и дополнения. Поэтому окончательный результат может быть немного иной.

Опубликовано в рубрикеЯдро CMS (PHP)