CodeПриклад фреймворку Igniter MVC (Model View Controller)

⚡ Розумний підсумок

CodeФреймворк Igniter MVC розділяє застосунок на Модель, Представлення та Контролер. Модель обробляє дані та бізнес-логіку, контролер координує запити, а Представлення представляє результат, забезпечуючи слабкий зв'язок, гнучкість та вищу продуктивність розробника.

  • 🏗️ Основний візерунок: MVC поділяє застосунок на компоненти моделі, вигляду та контролера.
  • 💾 Model: Взаємодіє з джерелом даних та зберігає бізнес-логіку, часто через Active Record.
  • 🎛️ Контролер: Очікує запити, перевіряє вхідні дані та координує модель і вигляд.
  • 🖼️ вид: Представляє дані у вигляді HTML, CSS та мінімального PHP, без зайвої логіки.
  • 🔗 Слабке зчеплення: Компоненти працюють незалежно, тому робота фронтенду та бекенду може виконуватися паралельно.
  • Короткі теги: CodeПредставлення Igniter зазвичай використовують короткі PHP-теги echo для чистіших шаблонів.
  • 🔁 Потік запитів: Контролер для моделювання для перегляду, потім HTML назад до браузера.

CodeФреймворк MVC Igniter

Що таке MVC?

MVC розшифровується як Model-View-Controller (Модель-Вид-Контролер). Це архітектурний шаблон, який розділяє застосунок на три основні компоненти:

  1. Модель має справу з бізнес-логікою та взаємодією з базами даних.
  2. Контролер координує дії між моделлю та виглядом.
  3. Вид відповідає за представлення даних.

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

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

Модель

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

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

Наприклад, 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

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

CodeКонтролер запалювання

Давайте тепер розглянемо, що сталося, коли ми завантажили URL у веббраузері. Відкрийте файл Welcome.php controller, розташований у application/controllers. Ви повинні побачити наступний код:

<?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') АБО exit('Прямий доступ до скриптів заборонено'); запобігає прямому доступу до контролера, якщо запит не надійшов через index.php. Це зроблено з міркувань безпеки.
  • клас 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 об'єкта customers_model та передає параметр 3. У цьому прикладі ми жорстко запрограмували значення, але в реальних застосунках це був би параметр з URI.
  • $this->load->view('welcome_message',$data); завантажує вигляд welcome_message та передає змінну $data.

CodeМодель запалювача

Давайте тепер створимо модель, на яку посилаються у наведеному вище коді. Для спрощення наша модель не взаємодіятиме з база даних але поверне статичний запис клієнта. Ми працюватимемо з базами даних у наступних навчальних посібниках. Створіть файл Customers_model.php у application/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) {…} визначає метод get_customer на основі ідентифікатора клієнта.
  • $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/Ви повинні побачити картку клієнта, як показано на зображенні нижче.

Картка з даними клієнта, надані CodeЗапалювач

Поширені запитання

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

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

Active Record — це вбудований конструктор запитів, який дозволяє моделям читати та записувати дані бази даних за допомогою викликів методів замість необробленого SQL. Це також допомагає запобігти SQL-ін'єкціям за допомогою esca.ping значень.

Штучний інтелект може генерувати відповідні файли контролера, моделі та представлення на основі опису функції та забезпечувати узгодженість імен. Revпереглянути згенеровані запити та їх перевірку перед їх запуском.

Короткий тег echo — це компактний спосіб виведення значення у представленні. Повний блок тегів php використовується для операторів та керуючих структур. Обидва еквівалентні для виводу, але короткі теги підтримують порядок у представленнях.

Підсумуйте цей пост за допомогою: