CodeПример использования фреймворка Igniter MVC (Model View Controller).

⚡ Умное резюме

CodeФреймворк Igniter MVC разделяет приложение на модель, представление и контроллер. Модель обрабатывает данные и бизнес-логику, контроллер координирует запросы, а представление отображает результат, обеспечивая слабую связанность, гибкость и повышение производительности разработчиков.

  • ???? ️ Основной шаблон: MVC разделяет приложение на компоненты модели, представления и контроллера.
  • 💾 Модель: Взаимодействует с источником данных и содержит бизнес-логику, часто через Active Record.
  • 🇧🇷 контроллер: Отслеживает запросы, проверяет входные данные и координирует работу модели и представления.
  • 🖼️ Посмотреть: Представление данных осуществляется в формате HTML, CSS и минимального PHP-кода, без сложной логики.
  • 🔗 Слабая связь: Компоненты работают независимо, поэтому разработка фронтенда и бэкенда может выполняться параллельно.
  • Короткие теги: CodeВ шаблонах Igniter обычно используются короткие теги `<echo>` в PHP для большей чистоты интерфейса.
  • 🔁 Схема обработки запросов: От контроллера к модели, затем к представлению, а затем обратно в браузер с HTML-кодом.

CodeIgniter MVC Framework

Что такое MVC?

MVC расшифровывается как Model-View-Controller (модель-представление-контроллер). Это архитектурный шаблон, который разделяет приложение на три основных компонента:

  1. Модель описывает бизнес-логику и взаимодействие с базами данных.
  2. Контроллер координирует действия между моделью и представлением.
  3. Функция View отвечает за представление данных.

Ниже перечислены некоторые преимущества архитектурного шаблона MVC:

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

Модель

Модель отвечает за взаимодействие с источниками данных. Обычно это база данных, но это также может быть сервис, предоставляющий запрошенные данные. Также распространенной практикой является размещение бизнес-логики в моделях, а не в контроллерах. Такая практика обычно называется «толстая модель, тонкий контроллер».

Модель обычно записывает данные в базу данных и предоставляет механизм для редактирования, обновления и удаления данных. В современных веб-приложениях модели используют шаблоны проектирования доступа к данным, такие как Active Record, чтобы упростить взаимодействие с базой данных.

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

Контроллер

Контроллер прослушивает входящие запросы на ресурсы от пользователей. Он выступает в качестве посредника между моделью и представлением, а также иногда реализует некоторые бизнес-правила. Предположим, контроллер получает запрос на регистрацию пользователя в базе данных.

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

После того как модель обработала информацию и вернула положительный ответ, контроллер загружает соответствующее представление и передает данные, возвращенные из модели, в качестве параметра.

Детали

Представление имеет дело с данными, предоставляемыми конечному пользователю. В веб-приложениях представления часто содержат HTML, CSS и, при необходимости, JavaСценарийПредставления содержат минимальный программный код, обычно достаточный только для перебора коллекций данных, полученных из модели, или вспомогательную функцию для очистки данных или создания ссылок для редактирования. Большинство современных веб-приложений используют шаблонизаторы со своим собственным псевдокодоподобным синтаксисом, понятным дизайнерам. При работе с CodeВ Igniter обычно используются короткие PHP-теги и управляющие структуры. Для отображения чего-либо в CodeВ Igniter вы можете использовать следующий код:

<?=$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') OR exit('No direct script access allowed'); предотвращает прямой доступ к контроллеру, если запрос поступил не через index.php. Это сделано в целях безопасности.
  • Класс Welcome extends CI_Controller {…} определяет класс контроллера Welcome и наследует родительский класс CI_Controller.
  • public function index(){…} определяет метод 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 расширяет CI_Model {…} определяет модель Customers_model, которая расширяет CI_Model.
  • public function 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воспламенитель

Часто задаваемые вопросы (FAQ)

Это означает, что бизнес-логика находится в модели, поэтому...ping Контроллер компактный и ориентирован на маршрутизацию запросов. Это делает логику многократно используемой, а контроллер — более читабельным и тестируемым.

Представление должно только отображать данные.ping Логика, лежащая в её основе, разделяет задачи, поэтому дизайнеры могут редактировать макет, не затрагивая бизнес-правила, и одни и те же данные могут отображаться в разных представлениях.

Active Record — это встроенный построитель запросов, который позволяет моделям читать и записывать данные в базу данных с помощью вызовов методов, а не с помощью прямого SQL-запроса. Он также помогает предотвратить SQL-инъекции путем взлома.ping значения.

Искусственный интеллект может генерировать соответствующие файлы контроллера, модели и представления на основе описания объекта, обеспечивая при этом согласованность имен. RevПросмотрите сгенерированные запросы и результаты проверки перед их выполнением.

Короткий тег `<echo>` — это компактный способ вывода значения в представление. Полный блок тегов PHP используется для операторов и управляющих структур. Оба варианта эквивалентны по способу вывода, но короткие теги позволяют представлениям выглядеть аккуратнее.

Подведем итог этой публикации следующим образом: