Vodič za PHP MVC okvir
⚡ Pametni sažetak
PHP MVC Framework dizajn odvaja podatke aplikacije i poslovnu logiku od prezentacije, koristeći modele, prikaze i kontrolere. CodeIgniter čini ovaj obrazac praktičnim, omogućujući PHP programerima bržu izgradnju sigurnih i održivih web aplikacija.
Što je PHP MVC okvir?
PHP MVC je obrazac dizajna aplikacije koji odvaja podatke aplikacije i poslovnu logiku (model) od prezentacije (pogleda). MVC je kratica za Model, View & Controller.
Kontroler posreduje između modela i pogleda.
Razmišljajte o MVC uzorku dizajna kao o automobilu i vozaču.
Automobil ima vjetrobranska stakla (pogled) koja vozač (kontrolor) koristi za praćenje prometa ispred sebe, a zatim ubrzava ili koči (model) ovisno o tome što vidi ispred sebe.
Zatim, pogledajmo zašto se isplati koristiti okvir izgrađen na ovom obrascu.
Zašto koristiti PHP MVC Framework?
PHP MVC okviri pojednostavljuju rad sa složenim tehnologijama na sljedeći način:
- Skrivanje svih složenih detalja implementacije
- Pružanje standardnih metoda koje možemo koristiti za izgradnju naših aplikacija
- Povećanje produktivnosti programera, jer su osnovne implementacije aktivnosti poput povezivanja s bazom podataka i sanitizacije korisničkog unosa već djelomično implementirane
- Poticanje pridržavanja profesionalnih standarda kodiranja
PHP MVC uzorak dizajna
Hajde sada ukratko raspraviti svaku komponentu MVC uzorka dizajna.
Model – ovaj dio se bavi poslovnom logikom i podacima aplikacije. Može se koristiti za provjeru valjanosti podataka, obradu podataka i njihovo pohranjivanje. Podaci mogu doći iz;
- ravna turpija
- baza podataka
- XML dokument
- Ostali valjani izvori podataka.
kontrolor – ovo je dio koji se bavi korisničkim zahtjevima za resursima od poslužitelja.
Na primjer, kada korisnik zatraži URL …/index.php?products=list, kontroler će učitati model proizvoda kako bi dohvatio podatke o proizvodima, a zatim će rezultate prikazati u prikazu popisa.
Ukratko, kontroler povezuje modele i poglede zajedno ovisno o traženim resursima.
Posjeta – ovaj dio se bavi predstavljanjem podataka korisniku. To je obično u obliku HTML stranica.
Vrste PHP MVC okvira
Odabir najboljeg PHP okvira je izazov.
Ne morate napisati vlastiti okvir da biste imali koristi od prednosti MVC-a.
Trebali biste samo pokušati izraditi vlastiti dizajn aplikacije koji se odnosi na MVC kako biste razumjeli kako rade MVC okviri.
Nakon što se upoznate s načinom na koji MVC okviri rade, trebali biste prijeći na zrele i već testirane okvire.
Donja tablica ukratko opisuje neke od popularnih PHP frameworkova i značajke koje svaki framework nudi.
| Okvir | Description |
|---|---|
|
|
To je jedan od najpopularnijih PHP MVC frameworka, sada u svojoj četvrtoj glavnoj verziji (CodeIgniter 4). Lagan je i ima kratku krivulju učenja. Ima bogat skup biblioteka koje pomažu u brzoj izradi web stranica i aplikacija. Mogu ga koristiti i korisnici s ograničenim znanjem OOP programiranja. Aplikacije izgrađene s CodeUključuje upaljač;
|
|
To je siguran i lagan okvir Hijerarhijskog kontrolera prikaza modela (HMVC). Bilješka: Kohana je službeno ukinuta 2017.; njezino posljednje stabilno izdanje bilo je 3.3.6 (srpanj 2016.). Zajednički fork Koseven nastavio je s njegovom kodnom bazom. Tvrtke koje su koristile Kohanu uključuju; |
|
Izrađen je po uzoru na Ruby on Rails i aktivno se održava (verzija 5.x). Poznat je po konceptima kao što su obrasci dizajna softvera, konvencija umjesto konfiguracije, ActiveRecord itd. CakePHP pokretane aplikacije uključuju; |
|
|
To je snažan okvir koji je;
Idealan je za razvojping poslovne aplikacije. Godine 2020. Zend Framework je prešao na projekt otvorenog koda Laminas. Aplikacije pokrenute platformom Zend/Laminas uključuju;
Tvrtke koje su koristile Zend framework uključuju;
|
PHP MVC Framework u odnosu na obični PHP: Ključne razlike
Što framework zapravo mijenja u praksi? Običan PHP vam daje potpunu slobodu, ali svaki projekt na kraju iznova izmišlja usmjeravanje, validaciju i pristup bazi podataka od nule. PHP MVC framework standardizira ove repetitivne zadatke, tako da vaš kod ostaje dosljedan u svim projektima i timovima.
| Aspekt | Obični PHP | PHP MVC okvir |
|---|---|---|
| Code organizacija | Miješani HTML, SQL i logika u pojedinačnim datotekama | Podijeljeno na modele, poglede i kontrolere |
| Pristup bazi podataka | Rukom pisani upiti na svakoj stranici | Ugrađeni alat za izradu upita ili ORM s povezivanjem parametara |
| Sigurnost | Programer mora imati na umu sve mjere opreza | Uključeno filtriranje ulaza, XSS i CSRF zaštita |
| održavanje | Promjene se nepredvidivo šire kroz datoteke | Svaki sloj se može mijenjati neovisno |
💡 Savjet: Prvo izgradite jedan mali, jednostavan PHP projekt, poput ankete u nastavku; muka miješanog koda čini vrijednost MVC odvajanja očitom.
Prenošenje aplikacije za anketu na Codeupaljač
U ovom udžbenik, kreirali smo PHP aplikaciju za ankete. Ovdje ćemo taj kod prenijeti na Codeupaljač
- Preuzimanje najnovija verzija CodeUpaljač od njihovog web stranicu.
- ExtracSadržaj zip datoteke spremite u svoj razvojni direktorij u direktoriju vašeg web poslužitelja. U ovoj lekciji koristit ćemo ciopinionpoll kao naziv mape.
- Pregledajte URL http://localhost/ciopinionpoll/
The CodePočetna stranica Ignitera potvrđuje da je okvir ispravno instaliran. Sada ćemo prenijeti našu aplikaciju za anketiranje na CodeUpaljač. Podsjetimo se da je naša aplikacija bila podijeljena u tri glavne komponente, naime;
- Prednji kontroler – ovo je dio koji reagira na URL zahtijeva i vraća traženu stranicu. Ovaj kod će ići u kontroler
- Model – ovo je kod koji odgovara na zahtjeve za podacima i vraća tražene podatke. Ovaj kod će ući u model
- Pogledi – ovo je kod odgovoran za formatiranje i prikaz podataka. Ovaj kôd će ići u prikaz
Postavke konfiguracije baze podataka
Za konfiguriranje veze s bazom podataka:
- Pregledajte mapu ciopinionpoll
- Otvorite baza podataka.php datoteka koja se nalazi u direktoriju application/config.
- Pronađite sljedeće retke koda
- Postavite korisničko ime na root
- Postavite lozinku na svoju root lozinku lokalnog hosta
- Postavite naziv baze podataka na opinion_poll. Imajte na umu da ćemo koristiti bazu podataka kreiranu u prethodnoj lekciji.
- Spremite promjene i zatvorite datoteku.
Izrada našeg modela
Zatim ćemo stvoriti naš model koji će proširiti CI_Model. CI_Model je dio CodeBiblioteke Ignitera. Model će se nalaziti u aplikaciji/modelima model_ankete_mnijenja.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
OVDJE,
- “class Opinion_poll_model extends CI_Model…” je naš model koji proširuje CI_Model
- „parent::__construct();“ poziva konstruktor CI_Model
- “$this->load->database();” učitava biblioteku baze podataka tako da naša aplikacija može komunicirati s bazom podataka
- „$this->db->“ je CodeAktivni zapis Ignitera. Provjerite ovo link za više informacija o aktivnom zapisu.
Izrada našeg kontrolera
Sada stvorimo kontroler. Koristit ćemo zadane CodeKontroler paljenja nalazi se u datoteci application/controllers/welcome.php. Zamijenite njegov izvorni kod sljedećim kodom.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
OVDJE,
- “if (!defined('BASEPATH')) exit('Nije dopušten izravan pristup skripti');” osigurava da korisnici ne pristupaju izravno klasi kontrolera
- “class Welcome extends CI_Controller…” naš kontroler proširuje klasu CI_Controller
- „public function __construct()“ poziva metodu konstruktora klase CI_Controller i učitava naš model Opinion_poll_model
- „public function index()…“ je funkcija koja se preslikava na index.php. Koristi CodeIgniterova ulazna klasa provjerava je li glas poslan, dodaje ga u bazu podataka, a zatim prikazuje rezultate. Ako je niz post ulazne klase prazan, učitava stranicu za glasanje.
- „$this->input->post('…')” je CodeUlazna klasa Igniter koja dohvaća sadržaj globalne varijable $_POST.
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))” poziva metodu modela add_vote za dodavanje glasova u bazu podataka.
Stvaranje naših pogleda
Podsjetimo se iz prethodnog primjera da smo imali dvije HTML stranice, jednu za glasanje i drugu za rezultate. Koristit ćemo isti HTML kod s minimalnim izmjenama za izradu naših prikaza. Izradite sljedeće datoteke u direktoriju application/views
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
Kreirajmo sada stranicu s rezultatima results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
Testiranje naše aplikacije
Pod pretpostavkom da je korijenski direktorij vaše aplikacije ciopinionpoll, idite na http://localhost/ciopinionpoll/
Gornja stranica za glasanje dolazi iz našeg prikaza opinion_poll_form. Kliknite U redu bez odabira opcije i vidjet ćete sljedeću poruku upozorenja
Glasajte za svoju omiljenu knjižnicu, a zatim kliknite U redu. Vidjet ćete sljedeću stranicu s rezultatima
To potvrđuje da tri sloja rade zajedno: kontroler je primio glas, model ga je pohranio i prebrojao, a prikaz je prikazao ukupne iznose.









