CodeПример за рамка Igniter MVC (Model View Controller)
⚡ Умно обобщение
CodeFramework-ът Igniter MVC разделя приложението на Модел, Изглед и Контролер. Моделът обработва данни и бизнес логика, контролерът координира заявките, а изгледът представя резултата, осигурявайки хлабава връзка, гъвкавост и по-висока производителност на разработчиците.

Какво е MVC?
MVC е съкращение от Model-View-Controller. Това е архитектурен шаблон, който разделя приложението на три основни компонента:
- Моделът се занимава с бизнес логиката и взаимодействията с базата данни.
- Контролерът координира дейностите между модела и изгледа.
- Изгледът е отговорен за представянето на данните.
Следните са някои от предимствата на архитектурния модел MVC:
- Слаба връзка – компонентите съществуват и функционират независимо един от друг.
- Гъвкавост – можете лесно да правите промени в отделни компоненти.
- Повишена производителност – повече от един човек може да работи по проекта едновременно. Front-end разработчиците могат да работят върху изгледи и презентации, докато back-end разработчиците се фокусират върху модели и тъй като системата е слабо свързана, в крайна сметка всичко работи заедно.
Модел
Моделът е отговорен за взаимодействието с източници на данни. Това обикновено е база данни, но може да бъде и услуга, която предоставя заявените данни. Също така е обичайна практика бизнес логиката да се съхранява в моделите, а не в контролера. Тази практика обикновено се нарича „дебел модел, слаб контролер“.
Моделът обикновено записва данни в базата данни и предоставя механизъм за редактиране, актуализиране и изтриване на данни. В съвременните уеб приложения моделите използват шаблони за проектиране на достъп до данни, като например Active Record, за да улеснят взаимодействието с базата данни.
Например, CodeIgniter използва вградена библиотека Active Record, за да подпомогне моделите, докато други рамки, като Laravel, използват Eloquent Object Relational Mapper (ORM) за достъп до данни.
Регулатор
Контролерът слуша входящи заявки за ресурси от потребители. Той действа като посредник между модела и изгледа и понякога внедрява някои бизнес правила. Да предположим, че контролерът получава заявка за регистриране на потребител в базата данни.
Администраторът може да извърши валидиране на данните, за да се увери, че всички необходими параметри са налични. Ако нещо липсва, потребителят се пренасочва към страницата за регистрация със съответното съобщение за грешка. Администраторът може също да поиска от модела да извърши допълнителна валидация, като например проверка дали подаденият имейл адрес вече съществува. Ако всички правила за валидиране са изпълнени, администраторът изпраща данните към модела за обработка и чака отговор.
След като моделът е обработил информацията и е върнал положителен отговор, контролерът зарежда подходящия изглед и предава данните, върнати от модела като параметър.
Гледка
Изгледът се занимава с данни, представени на крайния потребител. В уеб приложенията изгледите често съдържат HTML, CSS и по избор JavaСценарийИзгледите съдържат минимален програмен код, обикновено достатъчно, за да премине през колекции от данни, получени от модела, или помощна функция за почистване на данни или създаване на връзки за редактиране. Повечето съвременни уеб приложения използват шаблонни двигатели със собствен синтаксис, подобен на псевдокод, който дизайнерите могат да разберат. При работа с 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 рамката.
Контролерът получава заявката от потребителя, взаимодейства с модела на базата данни, ако е необходимо, след което връща резултата на браузъра под формата на 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('Не е разрешен директен достъп до скриптове'); предотвратява директния достъп до контролера, ако заявката не е дошла през 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 разширява 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/Трябва да видите картата на клиента, както е показано на изображението по-долу.


