Ну вот всё готово и настроено. Теперь можно приступить непосредственно к написанию кода.

Сначала создам первый файл .htaccess.

Он нужен для того, что-бы была возможность сделать красивые URL. Типа mysite.ru/blog/post-o-chem-to-interestnom.

AddDefaultCharset utf-8_bin
DirectoryIndex index.php

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Скажу чесно я до конца так и не разобрался как именно это всё работает. Думал ещё потратить время и почитать чтоб лучше разобраться. Однако на глаза мне папалась вот эта статейка на хабре. И я вспомнил как раньше примерно 8-10 лет назад написал для своего бизнеса простую CRM. Тогда я знал ещё меньше чем сейчас. Просто стояла задача сделать и я сделал. Заняло у меня это всё около 2х недель. Несомненный плюс стека HTML+PHP=MySQL как раз в том, что можно имея минимум знаний сделать что-то для себя лично. А дальше уже если всё это понравилось постепенно углубляться в язык, совершенствовать знания и возможно даже получить профессию.

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

Что-то меня опять понесло в рассуждения ))
Пора создать ещё пару файлов и начать уже писать код на PHP.

Следующий файл естественно index.php.

<?php

$systemCofig = __DIR__ . '/core/config/SystemConfig1.php';

if (!is_readable($systemCofig)) {
    header('location:install.php');
    die('Нет файла конфигурации');
} 

require_once $systemCofig;
Route::bootstrap();

Здесь всё довольно просто. Переменная $systemCofig содержит путь к файлу конфигурации.
Соответственно если нет файла конфигурации идёт переадресация на install.php. Если по какой-то причине переадресация не сработает, программа просто завершит работу с сообщением «Нет файла конфигурации». Файл install.php я тоже создал но он пока будет пуст.

Если файл конфигурации на месте, подключаюсь к нему с помощью функции require_once и вызываю статическую метод bootstrap() класса Route.

Теперь очередь файла SystemConfig.php в папке config

<?php

define('MODE', 'DEV');

$autoloader = 'core/classes/utils/Autoloader.class.php';

if (!is_readable($autoloader)) {
    die('Ошибка конфигурации! Файл автозагрузки не существует');    
}

require_once $autoloader;
Autoloader::getInstance();

Здесь я объявляю константу MODE. Задача этой контстанты переключать режим работы с DEV на PUBLIC. Это мне пригодиться в дальнейшем. Условно режим DEV предназначен для разработки, режим PUBLIC для «боевого» режима. По моей задумке в режиме PUBLIC можно показывать готовый продукт условному заказчику.

Логика схожая с той что была в файле index.php. Я так же создаю переменную в которой хранится путь к файлу. Но на сей раз это файл автозагрузки. Если его не существует я просто завершаю работу программы. Ибо без этого файла дальнейшая работа программы невозможна. Если ошибки не возникло я вызываю метод getInstance() класса Autoloader.

В папке classes создаю подпапку utils и в ней создаю файл Autoloader.class.php. Писать код автозагрузчика буду позже. А пока создам в этой же папке файл Route.class.php. Пока и его оставлю пустым, сам класс напишу несколько позже.

В папке core/config создаю файл DbConfig.php в котором будут храниться настройки подключения к базе данных MySQL. Это просто массив.

<?php

return [
    'db_host' => 'localhost',
    'db_name' => 'PuzzleChessCms',
    'db_user' => 'root',
    'db_pass' => '0000'
];

На сегодня остался ещё один файл MapClasses.php. Это будет так называемая карта классов. В ней будут храниться все «системные классы приложения».

<?php

return [
    'Route' => '/core/classes/utils/Route.class.php'
];

Продолжение следует…