PHP MVC Framework Tutorial: CodeIgniter Eksempel
Hva er PHP MVC-rammeverket?
PHP MVC er et applikasjonsdesignmønster som skiller applikasjonsdata og forretningslogikk (modell) fra presentasjonen (visning). MVC står for Model, View & Controller.
Kontrolleren formidler mellom modellene og visningene.
Tenk på MVC-designmønsteret som en bil og sjåfør.
Bilen har frontrutene (visning) som føreren (kontrolleren) bruker for å overvåke trafikken foran, deretter hastighet eller brems (modell) avhengig av hva han ser foran seg.
Hvorfor bruke PHP MVC Framework?
- PHP MVC Frameworks forenkler arbeidet med komplekse teknologier ved å;
- Skjuler alle de komplekse implementeringsdetaljene
- Tilbyr standardmetoder som vi kan bruke for å bygge applikasjonene våre.
- Økt utviklerproduktivitet, dette er fordi basisimplementeringen av aktiviteter som å koble til databasen, rense brukerinndata osv. allerede er delvis implementert.
- Overholdelse av profesjonelle kodestandarder
PHP MVC-designmønster
La oss nå kort diskutere hver komponent i MVC-designmønsteret.
Modell – denne delen er opptatt av forretningslogikken og applikasjonsdataene. Den kan brukes til å utføre datavalidering, behandle data og lagre den. Dataene kan komme fra;
- flat fil
- database
- XML-dokument
- Andre gyldige datakilder.
controller – dette er delen som omhandler brukernes forespørsler om ressurser fra serveren.
Som et eksempel, når brukere ber om URL …/index.php?products=list, vil kontrolleren laste inn produktmodellen for å hente produktdataene og deretter sende ut resultatene i listevisningen.
I et nøtteskall kobler kontrolleren modellene og visningene sammen avhengig av de forespurte ressursene.
Visninger – denne delen omhandler presentasjon av data for brukeren. Dette er vanligvis i form av HTML-sider.
Typer PHP MVC-rammeverk
Å velge det beste PHP-rammeverket er en utfordring.
Du trenger ikke å skrive ditt eget rammeverk for å dra nytte av fordelene med MVC.
Du bør bare prøve å lage din egen MVC-relaterte applikasjonsdesign for å forstå hvordan MVC-rammeverk fungerer.
Når du er komfortabel med måten MVC-rammeverk fungerer på, bør du gå videre til de modne og allerede testede rammeverkene.
Tabellen nedenfor beskriver kort noen av de populære php-rammeverkene og funksjonene som hvert rammeverk tilbyr.
Rammeverk | Description |
---|---|
|
Det er et av de mest populære PHP MVC-rammeverkene. Den er lett og har en kort læringskurve. Den har et rikt sett med biblioteker som hjelper deg med å bygge nettsteder og applikasjoner raskt. Brukere med begrenset kunnskap om OOP-programmering kan også bruke den. CodeIgniter-drevne applikasjoner inkluderer; |
|
Det er en Hierarchical Model View Controller HMVC sikkert og lett rammeverk. Den har et rikt sett med komponenter for å utvikle applikasjoner raskt. Selskaper som bruker Kohana inkluderer; |
|
Den er modellert etter Ruby on rails. Det er kjent for konsepter som programvaredesignmønstre, konvensjon over konfigurasjon, ActiveRecord etc. CakePHP drevne applikasjoner inkluderer; |
|
Det er et kraftig rammeverk som er;
Den har APIer fra leverandører som Amazon, Google Flickr, Yahoo osv. Den er ideell for utvikling av forretningsapplikasjoner. Zend-drevne applikasjoner inkluderer;
Bedrifter som bruker Zend-rammeverket inkluderer;
|
Overfører meningsmålingsapplikasjonen til CodeIgniter
I dette tutorial, opprettet vi en PHP-avstemningsapplikasjon. Her vil vi portere den koden til CodeIgniter
- Last ned den nyeste versjonen av CodeIgniter fra deres nettside.
- Pakk ut innholdet i den zippede filen til utviklingskatalogen i webserverkatalogen. Vi vil bruke ciopinionpoll som mappenavn i denne leksjonen.
- Bla til URL-en http://localhost/ciopinionpoll/
Vi skal nå overføre meningsmålingsapplikasjonen vår til CodeIgniter. Husk at søknaden vår var delt inn i tre hovedkomponenter, nemlig;
- Frontkontroller – dette er delen som svarer på URL-forespørsler og returnerer den forespurte siden. Denne koden vil gå inn i kontrolleren
- Modell – dette er koden som svarer på forespurte data og returnerer forespurte data. Denne koden vil gå inn i modellen
-
Visninger – dette er koden som er ansvarlig for formatering og visning av dataene. Denne koden vil gå inn i visningen
- Bla til ciopinionpoll-mappen
- Åpne database.php filen som ligger i program-/konfigurasjonskatalogen.
- Finn følgende kodelinjer
Databasekonfigurasjonsinnstillinger
- Sett brukernavnet til root
- Sett passordet til ditt lokale vertsrotpassord
- Databasenavn til opinion_poll. Merk at vi skal bruke databasen opprettet i forrige leksjon.
- Lagre endringene og lukk filen.
Skaper vår modell
Deretter skal vi lage vår modell som vil utvide CI_Model. CI_Model er en del av CodeIgniter-bibliotekene. Modellen vil ligge i applikasjon/modeller opinion_poll_model.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); } } ?>
HER,
- "class Opinion_poll_model utvider CI_Model..." er vår modell som utvider CI_Model
- "...foreldre:: __construct();" kaller CI_Model-konstruktøren
- "$this->load->database();" laster databasebiblioteket slik at applikasjonen vår kan samhandle med databasen
- "$this->db->" er CodeIgniters aktive post. Sjekk dette link for mer informasjon om den aktive posten.
Opprette kontrolleren vår La oss nå lage kontrolleren. Vi vil bruke standard CodeIgniter-kontrolleren som ligger i application/controllers/welcome.php. Erstatt kildekodene med følgende kode.
<?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 */ ?>
HER,
- "if (!defined('BASEPATH')) exit('Ingen direkte skripttilgang tillatt');" sikrer at brukere ikke får direkte tilgang til kontrollerklassen
- "class Welcome utvider CI_Controller..." vår kontroller utvider CI_Controller-klassen
- "public function __construct()" kaller CI_Controllers klassekonstruksjonsmetode og laster vår Opinion_poll_model modell
- "public function index()..." er funksjonen som tilordnes index.php. den bruker CodeIgniters inngangsklasse for å sjekke om en stemme er sendt, legg den til databasen og vis deretter resultatene. Hvis postmatrisen til inputklassen er tom, laster den inn stemmesiden.
- "$this->input->post('...')" er CodeIgniter-inndataklassen som fanger innholdet i den globale variabelen $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kaller modellens add_vote-metode for å legge stemmen inn i databasen.
Skaper våre synspunkter
Husk fra forrige eksempel at vi hadde to HTML-sider, en for å stemme og den andre for resultater. Vi vil bruke den samme HTML-koden med minimale modifikasjoner for å lage våre synspunkter. Opprett følgende filer i program-/visningskatalogen
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>
La oss nå lage resultatsiden 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>
Testing av søknaden vår
Forutsatt at rotkatalogen til applikasjonen din er ciopinion, bla til http://localhost/ciopionpoll/
Klikk på OK-knappen, du vil se følgende varselmelding
Stem på din favorittkandidat og klikk deretter på OK. Du vil se følgende resultatside
konklusjonen
CodeIgniter er et PHP MVC-rammeverk som er lett å lære og bruke, som kan redusere tiden brukt på å utvikle applikasjoner betraktelig.
CodeIgniter er et PHP MVC-rammeverk som er lett å lære og bruke, som kan redusere tiden brukt på å utvikle applikasjoner betraktelig.
Oppsummering
- Et rammeverk er et sett med biblioteker som gir delvis implementering av vanlige oppgaver.
- PHP har en rekke modne og testede MVC-rammeverk med åpen kildekode.
- En god utviklingstilnærming skiller dataene fra presentasjonen og oppfordrer til bruk av enkelt inngangspunkt i en applikasjon.
- Tradisjonelle PHP-applikasjoner som følger beste praksis for applikasjonsdesign kan overføres til MVC-rammeverk med minimale modifikasjoner.