PHP MVC Framework Tutorial: CodeIgniter esimerkki
Mikä on PHP MVC -kehys?
PHP MVC on sovelluksen suunnittelumalli, joka erottaa sovelluksen tiedot ja liiketoimintalogiikan (mallin) esityksestä (näkymästä). MVC tulee sanoista Model, View & Controller.
Ohjain välittää mallien ja näkymien välillä.
Ajattele MVC-suunnittelumallia autona ja kuljettajana.
Autossa on tuulilasit (näkymä), joita kuljettaja (ohjain) käyttää valvomaan edessä olevaa liikennettä ja sitten nopeutta tai jarrutusta (malli) riippuen siitä, mitä hän näkee eteenpäin.
Miksi käyttää PHP MVC Frameworkia?
- PHP MVC Frameworks yksinkertaistaa monimutkaisten teknologioiden kanssa työskentelyä;
- Piilottaa kaikki monimutkaiset toteutustiedot
- Tarjoaa vakiomenetelmiä, joita voimme käyttää sovelluksiemme rakentamiseen.
- Lisääntynyt kehittäjien tuottavuus, tämä johtuu siitä, että toimintojen perustoteutus, kuten tietokantaan yhdistäminen, käyttäjän syötteiden puhdistaminen jne., on jo osittain toteutettu.
- Ammattimaisten koodausstandardien noudattaminen
PHP MVC -suunnittelukuvio
Keskustellaan nyt lyhyesti jokaisesta MVC-suunnittelumallin komponentista.
Malli – Tämä osa koskee liiketoimintalogiikkaa ja sovellustietoja. Sitä voidaan käyttää tietojen validointiin, tietojen käsittelyyn ja tallentamiseen. Tiedot voivat olla peräisin;
- litteä tiedosto
- tietokanta
- XML-dokumentti
- Muut kelvolliset tietolähteet.
ohjain – Tämä osa käsittelee käyttäjien resurssipyyntöjä palvelimelta.
Esimerkkinä, kun käyttäjät pyytävät URL-osoitetta …/index.php?products=list, ohjain lataa tuotemallin noutaakseen tuotetiedot ja tulostaa sitten tulokset luettelonäkymään.
Pähkinänkuoressa ohjain linkittää mallit ja näkymät yhteen pyydettyjen resurssien mukaan.
Näyttökerrat – Tämä osa käsittelee tietojen esittämistä käyttäjälle. Tämä on yleensä HTML-sivujen muodossa.
PHP MVC -kehyksen tyypit
Parhaan PHP-kehyksen valitseminen on haaste.
Sinun ei tarvitse kirjoittaa omaa kehystä hyötyäksesi MVC:n eduista.
Sinun tulisi vain yrittää luoda oma MVC:hen liittyvä sovellussuunnittelu ymmärtääksesi, miten MVC-kehykset toimivat.
Kun olet tyytyväinen MVC-kehysten toimintaan, sinun tulee siirtyä kypsiin ja jo testattuihin kehyksiin.
Alla olevassa taulukossa kuvataan lyhyesti joitain suosittuja php-kehyksiä ja kunkin kehyksen tarjoamia ominaisuuksia.
Puitteet | Tuotetiedot |
---|---|
|
Se on yksi suosituimmista PHP MVC -kehyksistä. Se on kevyt ja siinä on lyhyt oppimiskäyrä. Siinä on runsaasti kirjastoja, jotka auttavat rakentamaan verkkosivustoja ja sovelluksia nopeasti. Käyttäjät, joilla on vähän tietoa OOP-ohjelmoinnista, voivat myös käyttää sitä. CodeIgniter-käyttöiset sovellukset sisältävät; |
|
Se on hierarkkinen mallinäkymäohjain HMVC, turvallinen ja kevyt kehys. Siinä on runsaasti komponentteja sovellusten nopeaan kehittämiseen. Kohanaa käyttäviä yrityksiä ovat mm. |
|
Se on mallinnettu Ruby on rails -mallin mukaan. Se tunnetaan sellaisista käsitteistä kuin ohjelmistojen suunnittelumalleista, kokoonpanon ylittämisestä, ActiveRecord jne. cakePHP powered sovelluksia ovat; |
|
Se on voimakas kehys;
Se sisältää API:ita toimittajilta, kuten Amazon, Google, Flickr, Yahoo jne. Se on ihanteellinen yrityssovellusten kehittämiseen. Zend-käyttöiset sovellukset sisältävät;
Zend-kehystä käyttäviä yrityksiä ovat mm.
|
Mielipidekyselysovelluksen siirtäminen CodeIgniteriin
Tässä oppitunti, loimme PHP-kyselysovelluksen. Täällä siirrämme koodin CodeIgniteriin
- Lataa CodeIgniterin uusin versio heidän tuotteistaan -sivustolta.
- Pura pakatun tiedoston sisältö verkkopalvelimesi hakemistoon kehityshakemistoosi. Käytämme tämän oppitunnin kansion nimenä ciopinionpoll.
- Selaa URL-osoitteeseen http://localhost/ciopinionpoll/
Aiomme nyt siirtää mielipidekyselysovelluksemme CodeIgniteriin. Muista, että sovelluksemme oli jaettu kolmeen pääkomponenttiin, nimittäin;
- Etuohjain – tämä on osa, joka vastaa URL-pyyntöihin ja palauttaa pyydetyn sivun. Tämä koodi menee ohjaimeen
- Malli – tämä on koodi, joka vastaa pyydettyihin tietoihin ja palauttaa pyydetyt tiedot. Tämä koodi menee malliin
-
Näkymät – tämä koodi vastaa tietojen muotoilusta ja näyttämisestä. Tämä koodi siirtyy näkymään
- Selaa ciopinionpoll-kansioon
- Avaa tietokanta.php tiedosto, joka sijaitsee Application/config-hakemistossa.
- Etsi seuraavat koodirivit
Tietokannan kokoonpanoasetukset
- Aseta käyttäjänimi rootiksi
- Aseta salasana localhost-pääkäyttäjän salasanaksi
- Tietokannan nimi mielipidekyselyyn. Huomaa, että käytämme edellisellä oppitunnilla luotua tietokantaa.
- Tallenna muutokset ja sulje tiedosto.
Mallimme luominen
Seuraavaksi aiomme luoda mallimme, joka laajentaa CI_Model-mallia. CI_Model on osa CodeIgniter-kirjastoja. Malli sijoitetaan sovellukseen/malleihin mielipidekysely_malli.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); } } ?>
TÄSSÄ,
- “class Opinion_poll_model laajentaa CI_Model…” on mallimme, joka laajentaa CI_Model-mallia
- "...parent:: __construct();" kutsuu CI_Model-konstruktoria
- "$this->load->tietokanta();" lataa tietokantakirjaston, jotta sovelluksemme voi olla vuorovaikutuksessa tietokannan kanssa
- "$this->db->" on CodeIgniterin aktiivinen tietue. Tarkista tämä linkkiä lisätietoja aktiivisesta tietueesta.
Ohjaimemme luominen Luodaan nyt ohjain. Käytämme CodeIgniter-oletusohjainta, joka sijaitsee osoitteessa application/controllers/welcome.php. Korvaa sen lähdekoodit seuraavalla koodilla.
<?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 */ ?>
TÄSSÄ,
- "if (!defined('BASEPATH')) exit('Ei suoraa komentosarjan käyttöä sallittu');" varmistaa, että käyttäjät eivät pääse suoraan ohjainluokkaan
- “class Welcome laajentaa CI_Controlleria…” ohjaimemme laajentaa CI_Controller-luokkaa
- "public function __construct()" kutsuu CI_Controllerin luokan rakentajamenetelmää ja lataa Opinion_poll_model-mallimme
- “public function index()…” on funktio, joka liittyy indeksiin.php. se käyttää CodeIgniterin syöttöluokkaa tarkistaakseen, onko äänestys lähetetty, lisää se tietokantaan ja näyttää tulokset. Jos syöttöluokan viestitaulukko on tyhjä, se lataa äänestyssivun.
- “$this->input->post('…')” on CodeIgniterin syöttöluokka, joka nappaa globaalin muuttujan $_POST sisällön.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kutsuu mallin add_vote-menetelmää äänen lisäämiseksi tietokantaan.
Luomme näkemyksiämme
Muista edellisestä esimerkistä, että meillä oli kaksi HTML-sivua, yksi äänestämistä ja toinen tuloksia varten. Käytämme samaa HTML-koodia pienin muutoksin näkemyksiemme luomiseen. Luo seuraavat tiedostot sovellus-/näkymähakemistoon
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>
Luodaan nyt tulossivu tulokset.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>
Testaamme sovellustamme
Jos sovelluksesi juurihakemisto on ciopinion, siirry kohtaan http://localhost/ciopionpoll/
Napsauta OK-painiketta, näet seuraavan varoitusviestin
Äänestä suosikkiehdokastasi ja napsauta sitten OK. Näet seuraavan tulossivun
Yhteenveto
CodeIgniter on helppo oppia ja käyttää PHP MVC -kehystä, joka voi vähentää huomattavasti sovellusten kehittämiseen käytettyä aikaa.
CodeIgniter on helppo oppia ja käyttää PHP MVC -kehystä, joka voi vähentää huomattavasti sovellusten kehittämiseen käytettyä aikaa.
Yhteenveto
- Viitekehys on joukko kirjastoja, jotka toteuttavat yhteisiä tehtäviä osittain.
- PHP:llä on useita avoimen lähdekoodin kypsiä ja testattuja MVC-kehyksiä.
- Hyvä kehitystapa erottaa tiedot esityksestä ja kannustaa käyttämään sovelluksessa yhden syöttöpisteen käyttöä.
- Perinteiset PHP-sovellukset, jotka noudattavat sovellussuunnittelun parhaita käytäntöjä, voidaan siirtää MVC-kehyksiin pienin muutoksin.