Framework CodeIgniter MVC (Model View Controller) s příkladem
Co je MVC?
Standardy MVC pro Model-View-Control. Jedná se o architektonický vzor, který rozděluje aplikaci na tři hlavní součásti.
1. Model se zabývá obchodní logikou a databázovými interakcemi
2. Kontrolér koordinuje aktivity mezi modelem a pohledem
3. Zobrazení je odpovědné za prezentaci dat
Následují některé z výhod architektonického vzoru MVC
- Volná spojka - komponenty existují a fungují nezávisle na sobě.
- Flexibilita – lze snadno provádět změny jednotlivých komponent
- Zvýšená produktivita – na projektu může pracovat více lidí současně. Vývojáři front-endu mohou pracovat na pohledech a prezentaci, zatímco vývojáři backendu se mohou soustředit na modely, a protože je systém volně propojený, funguje na konci dne.
Model
Model je zodpovědný za interakci se zdroji dat. Obvykle se jedná o databázi, ale může to být i služba, která poskytuje požadovaná data. Je také běžnou praxí mít obchodní logiku obsaženou v modelech na rozdíl od řadiče. Tato praxe se obvykle nazývá tlustý model hubený ovladač.
Model obvykle zapisuje data do databáze, poskytuje mechanismus pro editaci a aktualizaci a mazání dat. V moderní webové aplikaci modely využívají návrhové vzory přístupu k datům, jako je aktivní záznam, aby se usnadnila interakce s databází.
Například CodeIgniter používá k podpoře modelů vestavěnou knihovnu Active Record, zatímco jiné rámce, jako je Laravel, používají Eloquent Object Relational Mapper (ORM), který usnadňuje přístup k datům.
kontrolor
Řadič naslouchá příchozím požadavkům na zdroje od uživatelů. Funguje jako prostředník mezi modelem a pohledem a občas také implementuje některá obchodní pravidla. Řekněme, že kontrolér obdrží požadavek na registraci uživatele do databáze.
Správce může provést ověření údajů o tom, co bylo předloženo, aby se ujistil, že byly předloženy všechny požadované parametry. Pokud něco chybí, uživatel je přesměrován na registrační stránku s příslušnou chybovou zprávou. Správce může také požádat model, aby provedl další ověření ověřením, zda zadaná e-mailová adresa již existuje. Pokud všechna ověřovací pravidla projdou, správce odešle data modelu ke zpracování a čeká na odpověď.
Jakmile model zpracuje informace a vrátí kladnou odpověď, řídicí jednotka načte příslušný pohled a předá data vrácená z modelu jako parametr.
Zobrazit
Pohled se zabývá daty prezentovanými koncovému uživateli. Ve webových aplikacích pohledy často obsahují HTML, CSS a volitelně JavaScénář. Pohledy obsahují minimální programovací kód. Kód obsažený v pohledech se obvykle používá k procházení kolekcí dat přijatých jako parametry z modelu nebo pomocné funkce pro čištění dat nebo vytváření odkazů pro úpravu záznamů. Většina moderních webových aplikací obvykle používá šablonovací motory, které definují svou vlastní syntaxi, která je spíše pseudokódem a návrháři ji mohou snadno pochopit. Při práci s CodeIgniter je běžnou praxí používat krátké PHP tagy a řídicí struktury. Chcete-li něco zobrazit v CodeIgniter, můžete použít následující kód
<?=$title?>
Naproti tomu
<?php echo $title; ?>
Řídicí struktury jsou obvykle psány následovně
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
Jak můžete vidět z výše uvedeného příkladu, pohled bude používat kombinaci PHP a HTML místo toho, aby vše uzavřelo do čistého kódu PHP.
Jak fungují rámce MVC?
Následující obrázek ukazuje, jak funguje framework MVC
Kontrolér obdrží požadavek od uživatele, v případě potřeby interaguje s databázovým modelem a poté vrátí výsledek zpět do prohlížeče ve formě HTML kódu, který prohlížeč interpretuje do formátu čitelného člověkem a zobrazí uživateli.
Ovladač CodeIgniter
Pojďme si nyní rozebrat, co se právě stalo, když jsme načetli výše uvedenou adresu URL do webového prohlížeče.
Otevřete soubor Welcome.php controller umístěný application/controllers
Měli byste vidět následující kód
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
TADY,
- define('BASEPATH') OR exit('Není povolen přímý přístup pomocí skriptu'); zabrání přímému přístupu k řadiči, pokud požadavek nepřišel přes index.php. je to z bezpečnostních důvodů.
- třída Welcome rozšiřuje CI_Controller {…} definuje třídu Welcome controller a rozšiřuje nadřazenou třídu CI_Controller
- public function index(){…} definuje metodu indexu, která odpovídá URL
http://localhost:3000
- $this->load->view('welcome_message'); načte pohled welcome_message, který se nachází v adresáři application/views
Nyní aktualizujeme metodu indexu následovně
public function index() { $this->load->model('customers_model'); $data['customer'] = $this->customers_model->get_customer(3); $this->load->view('welcome_message',$data); }
TADY,
- $this->load->model('customers_model'); načte model zákazníků.
- $data['customer'] = $this->customers_model->get_customer(3); volá metodu get_customer customer_model a předává parametr 3. V tomto příkladu jsme hodnotu pevně zakódovali, ale v reálných aplikacích by to byl parametr z URI.
- $this->load->view('welcome_message',$data); načte pohled welcome_message a předá do pohledu proměnnou $data
Model CodeIgniter
Pojďme nyní vytvořit pohled, na který jsme odkazovali ve výše uvedeném kódu. Pro zjednodušení náš model nebude interagovat s databáze ale vrátí statický záznam zákazníka. S databázemi budeme pracovat v dalších tutoriálech.
Vytvořte soubor Customers_model.php v aplikaci/modely
Přidejte následující kód
<?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; } }
TADY,
- třída Customers_model rozšiřuje CI_Model {…} definuje model Customers_model, který rozšiřuje CI_Model.
- veřejná funkce get_customer($id) {…} definuje metodu získání zákazníka na základě ID zákazníka
- $data[…] definuje statické hodnoty našeho fiktivního zákazníka. Měl by to být řádek vrácený z databáze.
- return $data; vrátí údaje o zákazníkovi.
Tedy pro náš model. Nyní upravíme zobrazení uvítací_zprávy
Otevřete soubor welcome_message.php umístěný v
application/views/welcome_message.php
Nahraďte kód následujícím
<!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>
Uložte změny
Načtěte následující URL do webového prohlížeče
http://localhost:3000/
Měli byste vidět zákaznickou kartu, jak je znázorněno na obrázku níže
Shrnutí
- MVC je architektonický vzor, který rozděluje aplikaci na tři hlavní součásti
- Model je zodpovědný za interakci se zdroji dat
- Řadič naslouchá příchozím požadavkům na zdroje od uživatelů
- Ve webových aplikacích pohledy často obsahují HTML, CSS a volitelně JavaScénář
- Řadič obdrží požadavek od uživatele, v případě potřeby interaguje s databázovým modelem a poté vrátí výsledek zpět do prohlížeče ve formě HTML kódu