Фреймворк CodeIgniter MVC (Model View Controller) із прикладом

Що таке MVC?

Стандарти MVC для Model-View-Control. Це архітектурний шаблон, який розділяє програму на три основні компоненти.

1. Модель стосується бізнес-логіки та взаємодії з базою даних

2. Контролер координує дії між моделлю та представленням

3. View відповідає за представлення даних

Нижче наведено деякі з переваг архітектурного шаблону MVC

  • Слабкий зв’язок – компоненти існують і функціонують незалежно один від одного.
  • Гнучкість – можна легко вносити зміни в окремі компоненти
  • Підвищена продуктивність – над проектом може працювати більше ніж одна людина одночасно. Інтерфейсні розробники можуть працювати над переглядами та презентаціями, тоді як бекенд-розробники можуть зосередитися на моделях, і оскільки система слабко пов’язана, вона працює в кінці дня

Модель

Модель відповідає за взаємодію з джерелами даних. Зазвичай це база даних, але це також може бути служба, яка надає потрібні дані. Також поширеною практикою є бізнес-логіка, яка міститься в моделях на відміну від контролера. Цю практику зазвичай називають худим контролером товстої моделі.

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

Наприклад, CodeIgniter використовує вбудовану бібліотеку Active Record для допомоги моделям, тоді як інші фреймворки, такі як Laravel, використовують Eloquent Object Relational Mapper (ORM), який допомагає отримати доступ до даних.

контролер

Контролер прослуховує вхідні запити на ресурси від користувачів. Він діє як проміжна ланка між моделлю та представленням, а іноді також реалізує деякі бізнес-правила. Припустимо, контролер отримує запит на реєстрацію користувача в базі даних.

Контролер може виконати перевірку даних щодо того, що було подано, щоб переконатися, що всі необхідні параметри були подані. Якщо чогось не вистачає, користувач перенаправляється на сторінку реєстрації з відповідним повідомленням про помилку. Контролер може також попросити модель виконати додаткову перевірку, перевіривши, чи надіслана електронна адреса вже існує. Якщо всі правила перевірки пройшли, контролер надсилає дані моделі для обробки та чекає на відповідь.

Після того, як модель обробила інформацію та повернула позитивну відповідь, контролер завантажує відповідне представлення та передає дані, повернуті моделлю, як параметр.

вид

Перегляд має справу з даними, представленими кінцевому користувачеві. У веб-додатках представлення часто містять HTML, CSS і за бажанням JavaScript. Представлення містять мінімум коду програмування. Код, що міститься в представленнях, зазвичай використовується для циклічного перегляду колекцій даних, отриманих як параметри від моделі або допоміжної функції для очищення даних або створення посилань для редагування записів. Більшість сучасних веб-додатків зазвичай використовують механізми створення шаблонів, які визначають власний синтаксис, який більше схожий на псевдокод і може бути легко зрозумілий дизайнерам. При роботі з CodeIgniter звичайною практикою є використання коротких PHP-тегів і керуючих структур. Щоб відобразити щось у CodeIgniter, можна використати наступний код

<?=$title?>

На відміну від

<?php
echo $title;
?>

Керуючі структури зазвичай записуються наступним чином

<?php foreach ($customers as $customer): ?>
<li>
<p><?=$customer->first_name?><p>
</li>
<?php endforeach; ?>

Як ви можете бачити з наведеного вище прикладу, перегляд використовуватиме комбінацію PHP і HTML замість того, щоб включати все в чистий код PHP.

Як працюють фреймворки MVC?

На наступному зображенні показано, як працює структура MVC

MVC Frameworks працюють

Контролер отримує запит від користувача, взаємодіє з моделлю бази даних, якщо це необхідно, а потім повертає результат назад у браузер у вигляді коду HTML, який браузер інтерпретує у форматі, зрозумілому людині, і відображає користувачеві.

Контролер CodeIgniter

Давайте тепер розберемо, що сталося, коли ми завантажили наведену вище URL-адресу у веб-переглядач.

Відкрийте файл Welcome.php контролер, розташований додаток/контролери

Ви повинні побачити наступний код

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}

ТУТ,

  • defined('BASEPATH') OR exit('Прямий доступ до сценарію не дозволено'); запобігає прямому доступу до контролера, якщо запит не надійшов через index.php. це з метою безпеки.
  • class Welcome extends CI_Controller {…} визначає клас контролера Welcome та розширює батьківський клас CI_Controller
  • публічна функція index(){…} визначає метод індексу, який відповідає URL-адресі http://localhost:3000
    • $this->load->view('welcome_message'); завантажує подання Welcome_message, яке знаходиться в каталозі application/views

Тепер ми оновимо метод індексу наступним чином

public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}

ТУТ,

  • $this->load->model('customers_model'); завантажує модель клієнта.
  • $data['customer'] = $this->customers_model->get_customer(3); викликає метод get_customer customer_model і передає параметр 3. У цьому прикладі ми жорстко закодували значення, але в реальних програмах це буде параметр з URI.
  • $this->load->view('welcome_message',$data); завантажує подання Welcome_message і передає в подання змінну $data

Модель CodeIgniter

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

Створіть файл Customers_model.php у програмі/models

Додайте наступний код

<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}

ТУТ,

  • клас Customers_model extends CI_Model {…} визначає модель Customers_model, яка розширює CI_Model.
  • публічна функція get_customer($id) {…} визначає метод отримання клієнта на основі ідентифікатора клієнта
  • $data[…] визначає статичні значення нашого фіктивного клієнта. Це має бути рядок, повернутий із бази даних.
  • повернути $дані; повертає дані клієнта.

Тобто це для нашої моделі. Давайте тепер змінимо вигляд Welcome_message

Відкрийте welcome_message.php, розташований у

application/views/welcome_message.php

Замініть код наступним

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CodeIgniter MVC Basics</title>
</head>
<body>
<h1>Customer Details Card</h1>
<p>Customer ID : <strong><?=$customer['id']?></strong></p>
<p>First Name  : <strong><?=$customer['first_name']?></strong></p>
<p>Last Name   : <strong><?=$customer['last_name']?></strong></p>
<p>Address     : <strong><?=$customer['address']?></strong></p>
</body>
</html>

Збережіть зміни

Завантажте наступну URL-адресу у веб-браузер

http://localhost:3000/

Ви повинні побачити картку клієнта, як показано на зображенні нижче

Модель CodeIgniter

Підсумки

  • MVC це архітектурний шаблон, який розділяє програму на три основні компоненти
  • Модель відповідає за взаємодію з джерелами даних
  • Контролер прослуховує вхідні запити на ресурси від користувачів
  • У веб-додатках представлення часто містять HTML, CSS і за бажанням JavaScript
  • Контролер отримує запит від користувача, взаємодіє з моделлю бази даних, якщо необхідно, а потім повертає результат назад у браузер у вигляді HTML-коду.