Сейчас у нашего фреймворка есть недостаток: мы должны каждый раз копировать код из front.php когда создаем новый веб-сайт. Хоть 40 строк кода это не так уж и много, но было бы круто если бы код был помещен в соответствующий класс. Это дало бы нам возможность использовать фреймворк повторно и упростило тестирование.

Если вы поближе посмотрите на код, вы увидите что front.php принимает входные данные Request и отдает ответ Response. Наш фреймворк следует простому принципу: ответ создается на основании запроса.

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

Переместим обработку запроса в наш класс Simplex\Framework:

Обновите наш фронт-контроллер соответсвенно example.com/web/front.php:

Чтобы завершить рефакторинг, давайте переместим пути из example.com/src/app.php в другое пространство имен: Calendar.

Чтобы наши объекты использовали автузагрузку необходимо обновить composer.json:

Чтобы изменения вступили в силу, не забудьте

Переместите контроллер Calendar\Controller\LeapYearController:

И переместите функцию is_leap_year() в собственный класс:

Не забудьте обновить файл example.com/src/app.php соответсвенно:

Подведем итоги, вот новое расположение файлов:

Во как! У нашего приложения теперь есть 4 разных слоя и каждый из них преследует определенную цель:

  • web/front.php: Фронт-котроллер; чисто для создания интерфейса с клиентом (получает Request и отправляет Response) и предоставляет шаблонный код для инициализации фреймворка и нашего приложения;
  • src/Simplex: Код фреймворка, который обрабатывает Request (к тому же, это делает ваши контроллеры/шаблоны более тестопригодными);
  • src/Calendar: Наш специфичный код (контроллер и модель);
  • src/app.php: Конфигурация приложения / настройка фреймворка