Okvir CodeIgniter MVC (Model View Controller) s primjerom

Što je MVC?

MVC standardi za Model-View-Control. To je arhitektonski obrazac koji aplikaciju dijeli na tri glavne komponente.

1. Model se bavi poslovnom logikom i interakcijama baze podataka

2. Kontroler koordinira aktivnosti između modela i pogleda

3. Pogled je odgovoran za prezentaciju podataka

Slijede neke od prednosti MVC arhitektonskog uzorka

  • Loose coupling - komponente postoje i funkcioniraju neovisno jedna o drugoj.
  • Fleksibilnost – jednostavno se mogu mijenjati pojedinačne komponente
  • Povećana produktivnost – više od jedne osobe može raditi na projektu u isto vrijeme. Front-end programeri mogu raditi na prikazima i prezentaciji dok se backend programeri mogu usredotočiti na modele, a budući da je sustav labavo povezan, radi na kraju dana

Model

Model je odgovoran za interakciju s izvorima podataka. Obično je to baza podataka, ali može biti i usluga koja pruža tražene podatke. Također je uobičajena praksa da se poslovna logika nalazi u modelima za razliku od kontrolera. Ova praksa se obično naziva debeli model mršavi kontrolor.

Model obično upisuje podatke u bazu podataka, pruža mehanizam za uređivanje i ažuriranje te brisanje podataka. U modernoj web aplikaciji, modeli koriste obrasce dizajna pristupa podacima kao što je aktivni zapis kako bi olakšali interakciju s bazom podataka.

Na primjer, CodeIgniter koristi ugrađenu biblioteku Active Record za pomoć modelima, dok drugi okviri kao što je Laravel koriste Eloquent Object Relational Mapper (ORM) koji pomaže pristup podacima.

kontrolor

Kontroler sluša dolazne zahtjeve za resursima od korisnika. Djeluje kao posrednik između modela i pogleda, a ponekad implementira i neka poslovna pravila. Recimo da kontrolor dobije zahtjev za upis korisnika u bazu podataka.

Voditelj obrade može izvršiti provjeru valjanosti podataka o onome što je dostavljeno kako bi osigurao da su dostavljeni svi potrebni parametri. Ako nešto nedostaje, korisnik se preusmjerava na stranicu za registraciju s odgovarajućom porukom o pogrešci. Voditelj obrade također može zatražiti od modela da izvrši dodatnu provjeru valjanosti provjerom postoji li poslana adresa e-pošte. Ako sva pravila provjere prođu, kontroler šalje podatke modelu za obradu i čeka odgovor.

Nakon što je model obradio informacije i vratio pozitivan odgovor, kontroler učitava odgovarajući prikaz i prosljeđuje podatke vraćene iz modela kao parametar.

Pogled

Prikaz se bavi podacima prikazanim krajnjem korisniku. U web aplikacijama prikazi često sadrže HTML, CSS i opcionalno JavaScript. Pogledi sadrže minimalni programski kod. Kod sadržan u pogledima obično se koristi za prolazak kroz zbirke podataka primljenih kao parametri od modela ili pomoćne funkcije za čišćenje podataka ili stvaranje poveznica za uređivanje zapisa. Većina modernih web aplikacija obično koristi mehanizme za izradu predložaka koji definiraju vlastitu sintaksu koja je više poput pseudokoda i lako je mogu razumjeti dizajneri. Kada radite s CodeIgniterom, uobičajena je praksa koristiti kratke PHP oznake i kontrolne strukture. Za prikaz nečega u CodeIgniteru, može se koristiti sljedeći kod

<?=$title?>

Za razliku od

<?php
echo $title;
?>

Upravljačke strukture obično se pišu na sljedeći način

<?php foreach ($customers as $customer): ?>
<li>
<p><?=$customer->first_name?><p>
</li>
<?php endforeach; ?>

Kao što možete vidjeti iz gornjeg primjera, prikaz će koristiti kombinaciju PHP i HTML umjesto da sve zatvorite u čisti PHP kod.

Kako rade MVC okviri?

Sljedeća slika prikazuje rad okvira MVC

MVC Frameworks radi

Kontroler prima zahtjev od korisnika, stupa u interakciju s modelom baze podataka ako je potrebno, a zatim vraća rezultat natrag u preglednik u obliku HTML koda koji preglednik tumači u obliku koji je čitljiv ljudima i prikazuje korisniku.

Kontroler CodeIgniter

Pogledajmo sada što se upravo dogodilo kada smo učitali gornji URL u web preglednik.

Otvorite datoteku Welcome.php kontroler koji se nalazi u aplikaciji/kontrolerima

Trebali biste moći vidjeti sljedeći kod

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}

OVDJE,

  • definirano('BASEPATH') OR exit('Nije dopušten izravan pristup skripti'); sprječava izravan pristup kontroleru ako zahtjev nije došao preko index.php. ovo je iz sigurnosnih razloga.
  • klasa Welcome extends CI_Controller {…} definira klasu Welcome controller i proširuje nadređenu klasu CI_Controller
  • javna funkcija index(){…} definira metodu indeksa koja odgovara na URL http://localhost:3000
    • $this->load->view('welcome_message'); učitava view welcome_message koji se nalazi u direktoriju application/views

Sada ćemo ažurirati metodu indeksa na sljedeći način

public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}

OVDJE,

  • $this->load->model('model_kupaca'); učitava model kupaca.
  • $data['customer'] = $this->customers_model->get_customer(3); poziva metodu get_customer od customer_model i prosljeđuje parametar 3. U ovom smo primjeru teško kodirali vrijednost, ali u stvarnim aplikacijama to bi bio parametar iz URI-ja.
  • $this->load->view('welcome_message',$data); učitava prikaz Welcome_message i prosljeđuje varijablu $data u pogled

Model CodeIgniter

Kreirajmo sada pogled koji smo spomenuli u gornjem kodu. Radi jednostavnosti, naš model neće komunicirati s baza podataka ali će vratiti statički zapis kupca. Radit ćemo s bazama podataka u sljedećim tutorijalima.

Napravite datoteku Customers_model.php u aplikaciji/modeli

Dodajte sljedeći kod

<?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;
}
}

OVDJE,

  • klasa Customers_model extends CI_Model {…} definira model Customers_model koji proširuje CI_Model.
  • javna funkcija get_customer($id) {…} definira metodu get customer na temelju ID-a kupca
  • $data[…] definira statičke vrijednosti našeg fiktivnog kupca. Ovo bi trebao biti redak vraćen iz baze podataka.
  • vratiti $podatke; vraća podatke kupca.

Odnosno, to je za naš model. Promijenimo sada prikaz dobrodošlice_poruke

Otvorite welcome_message.php koji se nalazi u

application/views/welcome_message.php

Zamijenite kôd sljedećim

<!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>

Spremite promjene

Učitajte sljedeći URL u web preglednik

http://localhost:3000/

Trebali biste moći vidjeti korisničku karticu kao što je prikazano na slici ispod

Model CodeIgniter

Rezime

  • VMC je arhitektonski obrazac koji dijeli aplikaciju u tri glavne komponente
  • Model je odgovoran za interakciju s izvorima podataka
  • Kontroler sluša dolazne zahtjeve za resursima od korisnika
  • U web aplikacijama prikazi često sadrže HTML, CSS i opcionalno JavaScript
  • Kontroler prima zahtjev od korisnika, stupa u interakciju s modelom baze podataka ako je potrebno, a zatim vraća rezultat natrag u preglednik u obliku HTML koda