Разработка своего MVC фреймворка на PHP

В предыдущих уроках вы тренировались использовать готовый MVC фреймворк. Как правило, этим PHP программисты и занимаются - берут один из популярных готовых фреймворков, изучают его, а потом используют. В настоящее время есть 3 самых популярных фреймворка: Laravel, Yii и Symfony.

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

Далее в данном учебнике мы с вами разработаем свой MVC фреймворк на PHP. Еще раз подчеркну, что данный этап уже не обязателен, но поспособствует закреплению ваших знаний ООП на практическом примере.

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

Вы уже знаете, какой функционал у вас должен быть. Осталось его реализовать. Приступим!

Точка входа

Для начала в корневой папке вашего домена сделаем файл index.php со следующим содержанием:

<?php namespace Core; error_reporting(E_ALL); ini_set('display_errors', 'on'); ?>

Создайте файл index.php и добавьте в него указанные строки.

Настраиваем htaccess

Теперь сделаем так, чтобы все запросы из адресной строки адресовались на наш файл index.php. То есть всё, что бы не вбил пользователь в браузер будет адресоваться на index.php, а код этого файла будет разбираться с тем, какую именно страницу показать пользователю.

Вот содержимое файла htaccess:

RewriteEngine On RewriteBase / RewriteRule .+ index.php

Вспомним теперь, что адреса из папки project/webroot не должны перенаправляться на индекс, так как там мы храним стили, скрипты, картинки и тому подобные вещи. Учтем это в нашем htaccess:

RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^/project/webroot/ RewriteRule .+ index.php

Создайте файл htaccess. Выполните описанную настройку. Проверьте ее работу: все адреса, кроме адресов из папки project/webroot должны редиректится на index.

Автозагрузка классов

Наш учебный фреймворк использует нестандартные правила для автозагрузки классов (расскажите, в чем отличия), поэтому нам придется реализовать свою автозагрузку в файле index.php:

<?php namespace Core; error_reporting(E_ALL); ini_set('display_errors', 'on'); spl_autoload_register(function($class) { // ваша реализация автозагрузки }); ?>

Реализуйте функцию автозагрузки. Проверьте ее работу.