Простий приклад MVC та маршрутизації на чистому PHP

Уявіть, що ви будуєте веб-додаток. Як тільки він розростається, ваш код стає безладним і важким для підтримки. У більшості випадків у вас буде HTML змішаний з PHP (це погано, не робіть так більше), або ж запити до бази даних розкидані в різних місцях, що робить структуру проекту незрозумілою, а код — важким для читання! І ось тут на допомогу приходить MVC. Але спочатку —

Що таке MVC?
MVC — це шаблон проектування, який розділяє код вашого додатку на три основні компоненти:

  1. M — це Модель (Model). Тут знаходиться ваша бізнес-логіка! Модель відповідає за всі взаємодії з вашою базою даних.
  2. V — це Подання (View) (не Vendetta, ха...). Подання — це ваші HTML/Frontend шаблони, які бачить і з якими взаємодіє користувач.
  3. C — це Контролер (Controller), як і передбачає назва, він керує процесами і виступає посередником між поданням (view) і моделлю (model). Контролер обробляє введення користувача, взаємодіє з Моделлю (Model) і оновлює Подання (View).

pic

Це розділення робить ваш код чистішим, легшим для підтримки і, що найважливіше, масштабованим!

Але MVC не буде повним без системи маршрутизації! Тому —

Що таке маршрутизація (Routing)?

Маршрутизація — це процес відображення URL-адрес до конкретних контролерів і методів у вашому додатку.

Маршрутизація забезпечує, що коли користувач переходить за певною URL-адресою, викликається відповідний контролер і метод для обробки запиту.

— — — —

Створимо простий додаток: комбінуючи те, що ми тільки що дізналися!

  1. Точка входу в ваш додаток:

Кожен PHP-додаток починається з точки входу, у нашому випадку — це index.php. Цей файл ініціалізує додаток, запускає сесію (помітили, що тепер не потрібно стартувати сесію в кожному php файлі-поданні? Класно, правда?) і обробляє маршрутизацію.

pic

Що відбувається:

Ми визначаємо маршрути, використовуючи $route->get() і $route->post().

Кожен маршрут відображає URL-адресу на контролер і метод.

Метод resolve() співвідносить поточну URL-адресу з відповідним маршрутом і викликає відповідний метод контролера.

Маршрутизатор: Route.php

Думайте про маршрутизатор як про серце вашого додатку, він перенаправляє вхідні запити до правильного контролера і методу!

pic

Наш маршрутизатор зберігає маршрути в масиві, співвідносить URL запиту і метод з відповідним маршрутом. Якщо маршрути не знайдено, він повертає сторінку 404.

Контролер (Controller):

Контролери обробляють запити користувачів і взаємодіють з поданнями.

pic

Метод index (також відомий як дія (action)) звертається до моделі (Model), щоб отримати дані з нашої таблиці, а потім передає їх в подання (View).

Модель (Model):

Просто виконує запит до бази даних для отримання даних.

pic

Подання (View):

Звичайний HTML з необхідним PHP для динамічного контенту (помітили, як ми не ініціалізували сесію або PHP теги вище HTML?)

pic

Тепер з'єднаємо все це разом. Коли користувач відвідує “/”, маршрутизатор викликає метод index() контролера HomeController, який повертає отримані дані з моделі (Model), а потім завантажує home.php подання і відображає наше повідомлення в браузері.

Аааааа, і voilà!

pic

Якщо цей пост був корисний, будь ласка, поділіться ним з іншими розробниками!

Перекладено з: Simple MVC & Routing example with PHP native

Leave a Reply

Your email address will not be published. Required fields are marked *