PHP MVC Framework Tutorial
โก รlykรคs yhteenveto
PHP MVC Frameworkin suunnittelussa sovellusdata ja liiketoimintalogiikka erotetaan esityksistรค mallien, nรคkymien ja ohjainten avulla. CodeIgniter tekee tรคstรค mallista kรคytรคnnรถllisen, jolloin PHP-kehittรคjรคt voivat rakentaa turvallisia ja yllรคpidettรคviรค verkkosovelluksia nopeammin.
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รค), joiden avulla kuljettaja (ohjain) seuraa edessรค olevaa liikennettรค ja sitten kiihdyttรครค tai jarruttaa (malli) sen mukaan, mitรค hรคn nรคkee edessรครคn.
Seuraavaksi katsotaanpa, miksi tรคmรคn mallin pohjalta rakennettua viitekehystรค kannattaa kรคyttรครค.
Miksi kรคyttรครค PHP MVC Frameworkia?
PHP MVC -kehykset yksinkertaistavat tyรถskentelyรค monimutkaisten teknologioiden kanssa:
- Piilottaa kaikki monimutkaiset toteutustiedot
- Tarjoamalla standardimenetelmiรค, joita voimme kรคyttรครค sovellustemme rakentamiseen
- Kehittรคjien tuottavuuden lisรครคminen, koska toimintojen, kuten tietokantaan yhteyden muodostamisen ja kรคyttรคjรคsyรถtteen puhdistamisen, perustoteutukset on jo osittain toteutettu
- Ammattimaisten koodausstandardien noudattamisen kannustaminen
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รค on osa, joka kรคsittelee kรคyttรคjรคn palvelimelta tulevia resurssipyyntรถjรค.
Esimerkiksi, kun kรคyttรคjรค pyytรครค URL โฆ/index.php?products=list, ohjain lataa tuotemallin hakeakseen tuotetiedot ja nรคyttรครค sitten tulokset listanรคkymรคssรค.
Pรคhkinรคnkuoressa ohjain linkittรครค mallit ja nรคkymรคt yhteen pyydettyjen resurssien mukaan.
Nรคyttรถkerrat โ tรคmรค osa kรคsittelee datan esittรคmistรค kรคyttรคjรคlle. Tรคmรค tapahtuu 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 oleva taulukko kuvaa lyhyesti joitakin suosittuja PHP-kehyksiรค ja ominaisuuksia, joita kukin kehys tarjoaa.
| Puitteet | Tuotetiedot |
|---|---|
|
|
Se on yksi suosituimmista PHP MVC -kehyksistรค, nyt neljรคnnessรค pรครคversiossaan (CodeIgniter 4). Se on kevyt ja sillรค on lyhyt oppimiskรคyrรค. Siinรค on laaja valikoima kirjastoja, jotka auttavat rakentamaan verkkosivustoja ja sovelluksia nopeasti. Myรถs kรคyttรคjรคt, joilla on rajoitetusti tietoa OOP-ohjelmoinnista, voivat kรคyttรครค sitรค. Sovellukset, jotka on rakennettu CodeSytytin sisรคltรครค;
|
|
Se on hierarkkinen mallinรคkymรคohjain (HMVC) -ympรคristรถ, joka on turvallinen ja kevyt. Huomautus: Kohana lopetettiin virallisesti vuonna 2017; sen viimeisin vakaa julkaisu oli 3.3.6 (heinรคkuu 2016). Yhteisรถhaara Koseven jatkoi koodikantaansa. Kohanaa kรคyttรคneitรค yrityksiรค olivat muun muassa; |
|
Se on mallinnettu Ruby on Railsin mukaan ja sitรค yllรคpidetรครคn aktiivisesti (versio 5.x). Se tunnetaan kรคsitteistรค, kuten ohjelmistosuunnittelumalleista, konfigurointikรคytรคnnรถistรค, ActiveRecordista jne. cakePHP powered sovelluksia ovat; |
|
|
Se on voimakas kehys;
Se on ihanteellinen kehitystyรถhรถnping liiketoimintasovellukset. Vuonna 2020 Zend Framework siirtyi avoimen lรคhdekoodin Laminas-projektiin. Zend/Laminas-pohjaisiin sovelluksiin kuuluvat:
Zend-kehystรค kรคyttรคneitรค yrityksiรค ovat muun muassa:
|
PHP MVC Framework vs. tavallinen PHP: Keskeiset erot
Mitรค kehys oikeastaan โโmuuttaa kรคytรคnnรถssรค? Tavallinen PHP antaa tรคyden vapauden, mutta jokainen projekti joutuu keksimรครคn reitityksen, validoinnin ja tietokannan kรคytรถn uudelleen tyhjรคstรค. PHP MVC -kehys standardoi nรคmรค toistuvat tehtรคvรคt, joten koodisi pysyy yhdenmukaisena eri projektien ja tiimien vรคlillรค.
| Aspect | Pelkkรค PHP | PHP MVC -kehys |
|---|---|---|
| Code organisaatio | Sekoitettu HTML, SQL ja logiikka yksittรคisissรค tiedostoissa | Jaettu malleihin, nรคkymiin ja ohjaimiin |
| Pรครคsy tietokantaan | Kรคsin kirjoitettuja kyselyitรค jokaisella sivulla | Sisรครคnrakennettu kyselyiden rakentaja tai ORM parametrisidonnalla |
| Turvallisuus | Kehittรคjรคn on muistettava kaikki suojatoimet | Sisรครคntulosuodatus, XSS ja CSRF-suojaus sisรคltyvรคt |
| Hoito-ohjeet | Muutokset aaltoilevat arvaamattomasti tiedostojen lรคpi | Jokainen kerros voi muuttua itsenรคisesti |
๐ก Vinkki: Rakenna ensin yksi pieni, tavallinen PHP-projekti, kuten alla olevassa mielipidekyselyssรค; sekakoodin aiheuttama hankaluus tekee MVC-erottelun arvon ilmeiseksi.
Mielipidekyselysovelluksen siirtรคminen palveluun Codesytytin
Tรคssรค oppitunti, loimme PHP-kyselysovelluksen. Tรคssรค porttaamme kyseisen koodin palveluun Codesytytin
- Lataa uusin versio CodeSytytin heidรคn -sivustolta.
- Extract zip-tiedoston sisรคltรถ web-palvelimesi hakemistossa olevaan kehityshakemistoosi. Kรคytรคmme tรคllรค oppitunnilla kansion nimenรค ciopinionpoll-tiedostoa.
- Selaa URL http://localhost/ciopinionpoll/
CodeYllรค oleva Igniterin tervetulosivu vahvistaa, ettรค kehys on asennettu oikein. Aiomme nyt siirtรครค mielipidekyselysovelluksemme palveluun CodeSytytin. Muista, ettรค sovelluksemme oli jaettu kolmeen pรครคkomponenttiin, nimittรคin;
- Etuohjain โ tรคmรค on osa, joka reagoi URL pyytรครค ja palauttaa pyydetyn sivun. Tรคmรค koodi menee ohjaimeen
- Malli โ tรคmรค on koodi, joka vastaa datapyyntรถihin ja palauttaa pyydetyt tiedot. Tรคmรค koodi lisรคtรครคn malliin.
- Nรคkymรคt โ tรคmรค koodi vastaa tietojen muotoilusta ja nรคyttรคmisestรค. Tรคmรค koodi siirtyy nรคkymรครคn
Tietokannan kokoonpanoasetukset
Tietokantayhteyden mรครคrittรคminen:
- Selaa ciopinionpoll-kansioon
- Avaa tietokanta.php tiedosto, joka sijaitsee application/config-hakemistossa.
- Etsi seuraavat koodirivit
- Aseta kรคyttรคjรคnimi rootiksi
- Aseta salasanaksi localhost-pรครคkรคyttรคjรคn salasana
- Aseta tietokannan nimeksi mielipidekysely. Huomaa, ettรค kรคytรคmme edellisellรค oppitunnilla luotua tietokantaa.
- Tallenna muutokset ja sulje tiedosto.
Mallimme luominen
Seuraavaksi luomme mallin, joka laajentaa CI_Model-mallia. CI_Model on osa CodeSytytyskirjastot. Malli sijaitsee kansiossa application/models. mielipidekysely_malli.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);
}
}
?>
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 CodeSytyttimen aktiivinen tietue. Tarkista tรคmรค. linkkiรค lisรคtietoja aktiivisesta tietueesta.
Ohjaimen luominen
Luodaan nyt ohjain. Kรคytรคmme oletusarvoa CodeSytytysohjain sijaitsee tiedostossa application/controllers/welcome.php. Korvaa sen lรคhdekoodi 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 konstruktorimetodia ja lataa Opinion_poll_model-mallimme
- โpublic function index()โฆโ on funktio, joka kuvaa index.php-tiedostoa. Se kรคyttรครค CodeIgniterin syรถteluokka, joka tarkistaa, onko รครคni lรคhetetty, lisรครค sen tietokantaan ja nรคyttรครค tulokset. Jos syรถteluokan post-taulukko on tyhjรค, se lataa รครคnestyssivun.
- โ$this->input->post('โฆ')โ on CodeSytyttimen syรถteluokka, joka poimii $_POST-globaalin muuttujan 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, toinen รครคnestystรค ja toinen tuloksia varten. Kรคytรคmme samaa HTML-koodia minimaalisin muutoksin nรคkymien luomiseen. Luo seuraavat tiedostot application/views-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
Olettaen, ettรค sovelluksesi juurihakemisto on ciopinionpoll, selaa osoitteeseen http://localhost/ciopinionpoll/
Yllรค oleva รครคnestyssivu on perรคisin mielipidekyselylomake-nรคkymรคstรคmme. Napsauta OK valitsematta vaihtoehtoa, niin nรคet seuraavan varoitusviestin.
รรคnestรค suosikkikirjastoasi ja napsauta sitten OK. Nรคet seuraavan tulossivun
Tรคmรค vahvistaa, ettรค kolme tasoa toimivat yhdessรค: ohjain vastaanotti รครคnen, malli tallennti ja laski sen, ja nรคkymรค nรคytti kokonaissummat.









