CodeПример за рамка Igniter MVC (Model View Controller)

⚡ Умно обобщение

CodeFramework-ът Igniter MVC разделя приложението на Модел, Изглед и Контролер. Моделът обработва данни и бизнес логика, контролерът координира заявките, а изгледът представя резултата, осигурявайки хлабава връзка, гъвкавост и по-висока производителност на разработчиците.

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

CodeMVC рамка на Igniter

Какво е MVC?

MVC е съкращение от Model-View-Controller. Това е архитектурен шаблон, който разделя приложението на три основни компонента:

  1. Моделът се занимава с бизнес логиката и взаимодействията с базата данни.
  2. Контролерът координира дейностите между модела и изгледа.
  3. Изгледът е отговорен за представянето на данните.

Следните са някои от предимствата на архитектурния модел 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 рамката.

Как работи 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/Трябва да видите картата на клиента, както е показано на изображението по-долу.

Карта с данни за клиента, предоставена от Codeподпалвач

Въпроси и Отговори

Това означава, че бизнес логиката се намира в модела,ping Контролерът е тънък и фокусиран върху заявките за маршрутизиране. Това прави логиката многократно използваема и контролерът по-лесен за четене и тестване.

Изгледът трябва да представя само данни. Keeping Логиката извън него разделя задачите, така че дизайнерите могат да редактират оформлението, без да докосват бизнес правилата, а едни и същи данни могат да се показват в различни изгледи.

Active Record е вграден конструктор на заявки, който позволява на моделите да четат и записват в базата данни с извиквания на методи, вместо с суров SQL. Той също така помага за предотвратяване на SQL инжектиране от esca.ping стойности.

Изкуственият интелект може да генерира съответстващи файлове за контролери, модели и изгледи от описание на дадена функция и да поддържа последователност в именуването. Revпрегледайте генерираните заявки и проверката, преди да ги изпълните.

Краткият таг echo е компактен начин за отпечатване на стойност в изглед. Пълният блок с php тагове се използва за оператори и контролни структури. И двете са еквивалентни за изход, но кратките тагове поддържат изгледите подредени.

Обобщете тази публикация с: