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.









