Здарова всем! Это уже третья статья. Продолжаем создавать наш движок на php .

Создание движка на MVC. Дорабатываем роутер.

Здарова всем! Это уже третья статья. Продолжаем создавать наш движок на php.

Для начала возьмем весь код из главного файла index.php и вынесим его в отдельный класс с названием Bootstrap, который будет находиться в папке libs.

Файл bootstrap.php в папке libs.

<?php
  class Bootstrap {
   public function __construct() {
    $url = $_GET['url'];
    $url = rtrim($url, '/');
    $url = explode('/', $url);
    $file = 'controllers/'.$url[0].'.php';
    if(file_exists($file)) {
     require $file;
    } else {
     require 'controllers/error.php';
     $controller = new Error();
     return false;
    }
    $controller = new $url[0];
    if(isset($url[2])) {
     $controller->$url[1]($url[2]);
    } else {
     if(isset($url[1])) {
      $controller->$url[1]();
     }
    }
   }
  }
?>

Как вы можете видеть, здесь были добавлены некоторые проверки. Если файл есть, то подключаем его, иначе же подключаем контроллер, отвечающий за обработку ошибок и останавливаем скрипт. Давайте напишем наш контроллер ошибок. Для этого создайте файл error.php в папке controllers.

<?php
  class Error {
   public function __construct() {
    echo "Контроллер обработки ошибок";
   }
  }
?>

Все, что нам теперь осталось, прописать в нашем главном файле index.php, который у нас сейчас пустой, следующее:

<?php
  require 'libs/Bootstrap.php';
  $app = new Bootstrap();
?>

Все! Теперь у нас все должно работать, как и раньше, но если вы введете какое-нибудь неверное название контроллера, то увидите надпись, которую выводит наш контроллер ошибок

Что же, давайте теперь создадим базовый контроллер, который будет самым главным, а остальные контроллеры будут наследовать его. Для этого создайте файл Controller.php в папке libs.

<?php
  class Controller {
   public function __construct() {
    echo "Это главный контроллер";
   }
  }
?>

Теперь абсолютно всем контроллерам пропишите: extends Controller

Вот пример того, что нужно сделать со всеми контроллерами, на примере контроллера Error.php

<?php
  class Error extends Controller {
   public function __construct() {
    echo "Контроллер обработки ошибок";
   }
  }
?>

После того, как вы сделали это, всем контроллерам в конструкторе также следует прописать вызов родительского конструктора.

parent::__construct();

Теперь в нашем главном файле index.php добавьте подключение нашего главного контроллера.

<?php
  require 'libs/Bootstrap.php';
  require 'libs/Controller.php';
  $app = new Bootstrap();
?>

Теперь пропишем в нашем главном контроллере создание объекта View, который будет отвечать за вид.

<?php
  class Controller {
   public function __construct() {
    echo 'Это главный контроллер';
    $this->view = new View();
   }
  }
?>

Все. На этом я заканчиваю эту статью. Сегодня доработали наш роутер и создали контроллер, отвечающий за ошибки, а также главный контроллер. В следующем уроке мы уже перейдем ко второй части паттерна MVC - виду. До скорого!