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 | Tekniske beskrivelser |
|---|---|
|
|
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
Konklusjon
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.
Sammendrag
- 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.








