Vodič za PHP MVC okvir: primjer CodeIgnitera
Š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 vjetrobran (pogled) koji vozač (kontrolor) koristi za praćenje prometa ispred, zatim brzinu ili kočnicu (model) ovisno o tome što vidi ispred.
Zašto koristiti PHP MVC Framework?
- PHP MVC okviri pojednostavljuju rad sa složenim tehnologijama;
- Skrivanje svih složenih detalja implementacije
- Pružanje standardnih metoda koje možemo koristiti za izradu naših aplikacija.
- Povećana produktivnost programera, to je zato što su osnovne implementacije aktivnosti kao što su povezivanje s bazom podataka, dezinfekcija korisničkog unosa itd. već djelomično implementirane.
- Pridržavanje 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 zahtjevima korisnika za resursima s poslužitelja.
Na primjer, kada korisnici traže URL …/index.php?products=list, kontroler će učitati model proizvoda kako bi dohvatio podatke o proizvodima, a zatim prikazati rezultate u prikazu popisa.
Ukratko, kontroler povezuje modele i poglede zajedno ovisno o traženim resursima.
Posjeta – ovaj dio se bavi prezentiranjem 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 okvira i značajke koje svaki okvir nudi.
Okvir | Description |
---|---|
|
To je jedan od najpopularnijih PHP MVC okvira. Lagan je i ima kratku krivulju učenja. Ima bogat skup biblioteka koje pomažu u brzoj izradi web stranica i aplikacija. Korisnici s ograničenim znanjem OOP programiranja također ga mogu koristiti. Aplikacije koje pokreće CodeIgniter uključuju; |
|
To je hijerarhijski model View Controller HMVC siguran i lagan okvir. Ima bogat skup komponenti za brz razvoj aplikacija. Tvrtke koje koriste Kohanu uključuju; |
|
Napravljen je po uzoru na Ruby on rails. Poznat je po konceptima kao što su obrasci dizajna softvera, konvencija nad konfiguracijom, ActiveRecord itd. CakePHP pokretane aplikacije uključuju; |
|
To je snažan okvir koji je;
Sadrži API-je dobavljača poput AmazonGoogle, Flickr, Yahoo itd. Idealan je za razvoj poslovnih aplikacija. Aplikacije koje pokreće Zend uključuju;
Tvrtke koje koriste Zend framework uključuju;
|
Prijenos aplikacije za ispitivanje javnog mnijenja na CodeIgniter
U ovom udžbenik, izradili smo PHP aplikaciju za ankete. Ovdje ćemo taj kod prenijeti na CodeIgniter
- Preuzimanje najnoviju verziju CodeIgnitera od njihove web stranicu.
- Ekstrahirajte sadržaj komprimirane datoteke u svoj razvojni direktorij u direktoriju web poslužitelja. Koristit ćemo ciopinionpoll kao naziv mape u ovoj lekciji.
- Dođite do URL-a http://localhost/ciopinionpoll/
Sada ćemo prenijeti našu aplikaciju za ispitivanje javnog mnijenja na CodeIgniter. Podsjetimo se da je naša aplikacija bila podijeljena u tri glavne komponente, naime;
- Prednji kontroler – ovo je dio koji odgovara na URL zahtjeve i vraća traženu stranicu. Ovaj kod će ići u kontroler
- Model – ovo je kod koji odgovara na tražene podatke i vraća tražene podatke. Ovaj će kod ući u model
-
Pogledi – ovo je kod odgovoran za formatiranje i prikaz podataka. Ovaj kôd će ići u prikaz
- Pregledajte mapu ciopinionpoll
- Otvorite baza podataka.php datoteka koja se nalazi u direktoriju aplikacija/konfiguracija.
- Pronađite sljedeće retke koda
Postavke konfiguracije baze podataka
- Postavite korisničko ime na root
- Postavite lozinku na svoju root lozinku lokalnog hosta
- Naziv baze podataka za opinion_poll. Imajte na umu da ćemo koristiti bazu podataka stvorenu u prethodnoj lekciji.
- Spremite promjene i zatvorite datoteku.
Izrada našeg modela
Zatim ćemo kreirati naš model koji će proširiti CI_Model. CI_Model je dio biblioteka CodeIgniter. Model će se nalaziti u aplikaciji/modelima model_ankete_mnijenja.php
<?php class Opinion_poll_model extends CI_Model { public function __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++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model-> select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } 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
- “…roditelj:: __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 aktivni zapis CodeIgnitera. Provjeri ovo link za više informacija o aktivnom zapisu.
Stvaranje našeg kontrolera Kreirajmo sada kontroler. Koristit ćemo zadani kontroler CodeIgniter koji se nalazi u application/controllers/welcome.php. Zamijenite njegove izvorne kodove 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
- “javna funkcija __construct()” poziva metodu konstruktora klase CI_Controller i učitava naš model Opinion_poll_model
- “javna funkcija index()…” je funkcija koja se preslikava na index.php. koristi ulaznu klasu CodeIgnitera za provjeru je li glasovanje poslano, dodaje ga u bazu podataka i prikazuje rezultate. Ako je niz postova ulazne klase prazan, učitava se stranica za glasovanje.
- “$this->input->post('…')” je CodeIgniter ulazna klasa 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
Prisjetite se iz prethodnog primjera da smo imali dvije HTML stranice, jednu za glasovanje, a drugu za rezultate. Koristit ćemo isti HTML kod s minimalnim izmjenama za izradu naših prikaza. Stvorite sljedeće datoteke u direktoriju aplikacija/pogleda
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 ciopinion, potražite http://localhost/ciopionpoll/
Kliknite gumb U redu, vidjet ćete sljedeću poruku upozorenja
Glasujte za svog omiljenog kandidata, a zatim kliknite na OK. Vidjet ćete sljedeću stranicu s rezultatima
Zaključak
CodeIgniter je jednostavan za naučiti i koristiti PHP MVC okvir koji može uvelike smanjiti vrijeme potrošeno na razvoj aplikacija.
CodeIgniter je jednostavan za naučiti i koristiti PHP MVC okvir koji može uvelike smanjiti vrijeme potrošeno na razvoj aplikacija.
rezime
- Okvir je skup biblioteka koje omogućuju djelomičnu implementaciju uobičajenih zadataka.
- PHP ima niz zrelih i testiranih MVC okvira otvorenog koda.
- Dobar razvojni pristup odvaja podatke od prezentacije i potiče korištenje jedne ulazne točke u aplikaciju.
- Tradicionalne PHP aplikacije koje slijede najbolju praksu dizajna aplikacija mogu se prenijeti na MVC okvire uz minimalne izmjene.