CodePrimjer okvira Igniter MVC (Model View Controller)

โšก Pametni saลพetak

CodeIgniter MVC Framework dijeli aplikaciju na Model, View i Controller. Model obraฤ‘uje podatke i poslovnu logiku, controller koordinira zahtjeve, a view predstavlja rezultat, pruลพajuฤ‡i labavu povezanost, fleksibilnost i veฤ‡u produktivnost programera.

  • ๐Ÿ—๏ธ Osnovni uzorak: MVC dijeli aplikaciju na komponente modela, pogleda i kontrolera.
  • ๐Ÿ’พ Model: Interagira s izvorom podataka i pohranjuje poslovnu logiku, ฤesto putem Active Recorda.
  • ๐ŸŽ›๏ธ kontroler: Sluลกa zahtjeve, provjerava ulazne podatke i koordinira model i prikaz.
  • ๐Ÿ–ผ๏ธ Pregled: Prikazuje podatke kao HTML, CSS i minimalni PHP, osloboฤ‘en teลกke logike.
  • ๐Ÿ”— Labava veza: Komponente rade neovisno, tako da se rad na front-endu i back-endu moลพe odvijati paralelno.
  • โšก Kratke oznake: CodeIgniter prikazi obiฤno koriste kratke PHP echo oznake za ฤiลกฤ‡e predloลกke.
  • ๐Ÿ” Tijek zahtjeva: Kontroler za modeliranje za prikaz, zatim HTML natrag u preglednik.

CodeMVC okvir Igniter-a

ล to je MVC?

MVC je kratica za Model-View-Controller. To je arhitektonski obrazac koji aplikaciju dijeli na tri glavne komponente:

  1. Model se bavi poslovnom logikom i interakcijama s bazom podataka.
  2. Kontroler koordinira aktivnosti izmeฤ‘u modela i pogleda.
  3. Prikaz je odgovoran za prikaz podataka.

Neke od prednosti MVC arhitektonskog obrasca su sljedeฤ‡e:

  • Labava veza โ€“ komponente postoje i funkcioniraju neovisno jedna o drugoj.
  • Fleksibilnost โ€“ moลพete lako mijenjati pojedinaฤne komponente.
  • Poveฤ‡ana produktivnost โ€“ viลกe osoba moลพe istovremeno raditi na projektu. Front-end programeri mogu raditi na prikazima i prezentacijama, dok se back-end programeri usredotoฤuju na modele, a buduฤ‡i da je sustav labavo povezan, na kraju sve funkcionira zajedno.

Model

Model je odgovoran za interakciju s izvorima podataka. To je obiฤno baza podataka, ali moลพe biti i usluga koja pruลพa traลพene podatke. Takoฤ‘er je uobiฤajena praksa zadrลพati poslovnu logiku u modelima, a ne u kontroleru. Ova se praksa obiฤno naziva โ€ždebeli model, mrลกavi kontrolerโ€œ.

Model obiฤno zapisuje podatke u bazu podataka i pruลพa mehanizam za ureฤ‘ivanje, aลพuriranje i brisanje podataka. U modernoj web aplikaciji, modeli koriste obrasce dizajna za pristup podacima kao ลกto je Active Record kako bi olakลกali interakciju s bazom podataka.

Na primjer, CodeIgniter koristi ugraฤ‘enu Active Record biblioteku za pomoฤ‡ modelima, dok drugi okviri poput Laravela koriste Eloquent Object Relational Mapper (ORM) za pristup podacima.

kontrolor

Kontroler osluลกkuje dolazne zahtjeve za resursima od korisnika. Djeluje kao posrednik izmeฤ‘u modela i prikaza, a ponekad implementira i neka poslovna pravila. Pretpostavimo da kontroler primi zahtjev za registraciju korisnika u bazi podataka.

Kontroler moลพe izvrลกiti validaciju podataka o onome ลกto je poslano kako bi se osiguralo da su prisutni svi potrebni parametri. Ako neลกto nedostaje, korisnik se preusmjerava na stranicu za registraciju s odgovarajuฤ‡om porukom o pogreลกci. Kontroler takoฤ‘er moลพe zatraลพiti od modela da izvrลกi dodatnu validaciju, poput provjere postoji li veฤ‡ poslana adresa e-poลกte. Ako sva pravila validacije proฤ‘u, kontroler ลกalje podatke modelu na 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 JavaScriptPrikazi sadrลพe minimalni programski kod, obiฤno tek toliko da se proฤ‘e kroz zbirke podataka primljenih iz modela, ili pomoฤ‡nu funkciju za ฤiลกฤ‡enje podataka ili stvaranje poveznica za ureฤ‘ivanje. Veฤ‡ina modernih web aplikacija koristi mehanizme za izradu predloลพaka s vlastitom sintaksom sliฤnom pseudokodu koju dizajneri mogu razumjeti. Pri radu s CodeIgniter, uobiฤajena je praksa koriลกtenje kratkih PHP oznaka i kontrolnih struktura. Za prikaz neฤega u CodeIgniter, moลพete koristiti sljedeฤ‡i kod:

<?=$title?>

Za razliku od:

<?php
echo $title;
?>

Kontrolne strukture se obiฤno 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 koristi kombinaciju PHP i HTML umjesto da sve zatvorite u ฤisti PHP kod.

Kako funkcioniraju MVC okviri

Sljedeฤ‡a slika prikazuje kako MVC framework funkcionira.

Kako MVC okvir funkcionira

Kontroler prima zahtjev od korisnika, po potrebi komunicira s modelom baze podataka, a zatim vraฤ‡a rezultat pregledniku u obliku HTML koda, koji preglednik interpretira u format ฤitljiv ljudima i prikazuje korisniku.

CodeKontroler paljenja

Sada ฤ‡emo analizirati ลกto se dogodilo kada smo utovarili URL u web preglednik. Otvorite datoteku Welcome.php controller koja se nalazi u application/controllers. Trebali biste 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:

  • defined('BASEPATH') ILI exit('Nije dopuลกten izravan pristup skripti'); sprjeฤava izravan pristup kontroleru ako zahtjev nije doลกao putem index.php. To je iz sigurnosnih razloga.
  • klasa Welcome extends CI_Controller {โ€ฆ} definira klasu kontrolera Welcome i proลกiruje roditeljsku klasu CI_Controller.
  • javna funkcija index(){โ€ฆ} definira metodu indeksiranja koja odgovara na URL http://localhost:3000.
  • $this->load->view('welcome_message'); uฤitava prikaz welcome_message koji se nalazi u direktoriju application/views.

Sada ฤ‡emo aลพurirati metodu indeksiranja 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 customers_model i prosljeฤ‘uje parametar 3. U ovom primjeru imamo fiksno kodiranu 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.

CodeModel upaljaฤa

Sada stvorimo model na koji se referira u gornjem kodu. Radi jednostavnosti, naลก model neฤ‡e komunicirati s baza podataka ali ฤ‡e vratiti statiฤki zapis o kupcu. U sljedeฤ‡im tutorijalima radit ฤ‡emo s bazama podataka. Izradite datoteku Customers_model.php u application/models i 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.

To je to za naลก model. Sada modificirajmo prikaz welcome_message. Otvorite welcome_message.php koji se nalazi u:

application/views/welcome_message.php

Zamijenite kod 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>

Spremi promjene i uฤitaj sljedeฤ‡e URL u web pregledniku: http://localhost:3000/Trebali biste vidjeti karticu kupca kao ลกto je prikazano na slici ispod.

Kartica s podacima o kupcu generirana od strane Codeupaljaฤ

Pitanja i odgovori

To znaฤi da poslovna logika ลพivi u modelu,ping kontroler tanak i usmjeren na zahtjeve za usmjeravanje. To ฤini logiku ponovno upotrebljivom, a kontroler lakลกim za ฤitanje i testiranje.

Prikaz bi trebao prikazivati โ€‹โ€‹samo podatke. Keeping Logika iz toga odvaja brige, tako da dizajneri mogu ureฤ‘ivati โ€‹โ€‹izgled bez dodirivanja poslovnih pravila, a isti podaci mogu se prikazati u razliฤitim prikazima.

Active Record je ugraฤ‘eni alat za izradu upita koji omoguฤ‡uje modelima ฤitanje i pisanje u bazu podataka s pozivima metoda umjesto sirovog SQL-a. Takoฤ‘er pomaลพe u sprjeฤavanju SQL injekcije putem esca-e.ping vrijednosti.

Umjetna inteligencija moลพe generirati odgovarajuฤ‡e datoteke kontrolera, modela i prikaza iz opisa znaฤajke te odrลพavati dosljednost imenovanja. Revpregledajte generirane upite i validaciju prije njihovog pokretanja.

Kratka oznaka echo je kompaktan naฤin ispisa vrijednosti u prikazu. Puni php blok oznake koristi se za naredbe i kontrolne strukture. Obje su ekvivalentne za izlaz, ali kratke oznake odrลพavaju prikaze urednima.

Saลพmite ovu objavu uz: