PHP MVC raamistiku õpetus
⚡ Nutikas kokkuvõte
PHP MVC raamistiku disain eraldab rakenduse andmed ja äriloogika esitlusest, kasutades mudeleid, vaateid ja kontrollereid. CodeIgniter muudab selle mustri praktiliseks, võimaldades PHP arendajatel kiiremini luua turvalisi ja hooldatavaid veebirakendusi.

Mis on PHP MVC raamistik?
PHP MVC on rakenduse kujundusmuster, mis eraldab rakenduse andmed ja äriloogika (mudel) esitlusest (vaatest). MVC tähistab mudelit, vaadet ja kontrollerit.
Kontroller vahendab mudelite ja vaadete vahel.
Mõelge MVC disainimustrile kui autole ja juhile.
Autol on esiklaasid (vaade), mida juht (juhtimine) kasutab eesoleva liikluse jälgimiseks ning seejärel kiirendamiseks või pidurdamiseks (mudel) olenevalt sellest, mida ta ees näeb.
Järgmisena vaatame, miks selle mustri põhjal loodud raamistikku tasub kasutada.
Miks kasutada PHP MVC Frameworki?
PHP MVC raamistikud lihtsustavad keerukate tehnoloogiatega töötamist järgmiselt:
- Peida kõik keerukad rakenduse üksikasjad
- Pakume standardmeetodeid, mida saame oma rakenduste loomiseks kasutada
- Arendaja tootlikkuse suurendamine, kuna tegevuste (nt andmebaasiga ühenduse loomine ja kasutaja sisendi puhastamine) baasrakendused on juba osaliselt rakendatud.
- Professionaalsete kodeerimisstandardite järgimise julgustamine
PHP MVC disainimuster
Arutleme nüüd lühidalt MVC disainimustri iga komponendi üle.
MUDEL – see osa käsitleb äriloogikat ja rakenduse andmeid. Seda saab kasutada andmete valideerimiseks, andmete töötlemiseks ja salvestamiseks. Andmed võivad pärineda;
- lame fail
- andmebaas
- XML-dokument
- Muud kehtivad andmeallikad.
kontroller – see on osa, mis tegeleb kasutaja ressursside päringutega serverilt.
Näiteks, kui kasutaja taotleb URL …/index.php?products=list, laadib kontroller tootemudeli tooteandmete hankimiseks ja kuvab tulemused seejärel loendivaates.
Lühidalt, kontroller seob mudelid ja vaated olenevalt nõutud ressurssidest.
views – see osa tegeleb andmete esitamisega kasutajale. Tavaliselt toimub see HTML-lehtede kujul.
PHP MVC raamistiku tüübid
Parima PHP raamistiku valimine on väljakutse.
MVC eeliste kasutamiseks ei pea te ise oma raamistikku kirjutama.
Peaksite proovima luua ainult oma MVC-ga seotud rakenduse disaini, et mõista, kuidas MVC-raamistikud töötavad.
Kui olete rahul sellega, kuidas MVC raamistikud töötavad, peaksite liikuma küpsete ja juba testitud raamistike juurde.
Allolev tabel kirjeldab lühidalt mõningaid populaarseid PHP raamistikke ja funktsioone, mida iga raamistik pakub.
| Raamistik | Kirjeldus |
|---|---|
|
|
See on üks populaarsemaid PHP MVC raamistikke, mis on nüüd oma neljandas suuremas versioonis (CodeIgniter 4). See on kerge ja lühikese õppimiskõveriga. Sellel on rikkalik teekide komplekt, mis aitab kiiresti veebisaite ja rakendusi luua. Seda saavad kasutada ka kasutajad, kellel on piiratud teadmised OOP-programmeerimisest. Rakendused, mis on loodud CodeSüütaja hulka kuulub;
|
|
See on turvaline ja kerge raamistik, mis põhineb hierarhilisel mudelivaate kontrolleril (HMVC). Märge: Kohana ametlikult lõpetati 2017. aastal; selle viimane stabiilne versioon oli 3.3.6 (juuli 2016). Kogukonna haru Koseven jätkas oma koodibaasi. Ettevõtted, mis Kohanat kasutasid, on järgmised: |
|
See on loodud Ruby on Railsi eeskujul ja seda hooldatakse aktiivselt (versioon 5.x). See on tuntud selliste kontseptsioonide poolest nagu tarkvara disainimustrid, konfigureerimise konventsioon, ActiveRecord jne. CakePHP toitega rakenduste hulka kuuluvad; |
|
|
See on võimas raamistik, mis on;
See on ideaalne arendamiseksping ärirakendused. 2020. aastal läks Zend Framework üle avatud lähtekoodiga Laminas projektile. Zendi/Laminase baasil loodud rakendused hõlmavad järgmist:
Ettevõtted, mis on kasutanud Zend raamistikku, on järgmised:
|
PHP MVC raamistik vs tavaline PHP: peamised erinevused
Mida raamistik praktikas muudab? Tavaline PHP annab sulle täieliku vabaduse, aga iga projekt loob marsruutimise, valideerimise ja andmebaasile juurdepääsu nullist uuesti. PHP MVC raamistik standardiseerib need korduvad ülesanded, nii et sinu kood jääb projektide ja meeskondade lõikes järjepidevaks.
| Aspekt | Lihtne PHP | PHP MVC raamistik |
|---|---|---|
| Code organisatsioon | HTML, SQL ja loogika segatud ühes failis | Jaotatud mudeliteks, vaadeteks ja kontrolleriteks |
| Juurdepääs andmebaasile | Käsitsi kirjutatud päringud igal lehel | Sisseehitatud päringukoostaja või ORM parameetri sidumisega |
| TURVALISUS | Arendaja peab meeles pidama kõiki ettevaatusabinõusid | Sisendi filtreerimine, XSS ja CSRF kaitse on kaasas |
| Hooldus | Muudatused levivad failides ettearvamatult | Iga kiht saab iseseisvalt muutuda |
👍 Vihje: Ehita esmalt üks väike lihtne PHP projekt, nagu allolevas arvamusküsitluses näidatud; segakoodiga kaasnevad probleemid teevad MVC eraldamise väärtuse ilmseks.
Arvamusküsitluse rakenduse portimine Codeelektrisütik
Selle juhendaja, lõime PHP küsitlusrakenduse. Siin portime selle koodi Codeelektrisütik
- Lae uusim versioon CodeSüütaja nende käest kodulehel.
- ExtracKopeeri zip-faili sisu oma veebiserveri kataloogis asuvasse arenduskataloogi. Selles õppetükis kasutame kausta nimena ciopinionpoll.
- Sirvige jaotist URL http://localhost/ciopinionpoll/
. CodeÜlalolev Igniteri tervitusleht kinnitab, et raamistik on õigesti installitud. Nüüd portime oma arvamusküsitluse rakenduse CodeSüütaja. Tuletame meelde, et meie rakendus oli jagatud kolmeks põhikomponendiks, nimelt;
- Eesmine kontroller – see on osa, mis reageerib URL päringud ja tagastab soovitud lehe. See kood läheb kontrollerisse
- Mudel – see on kood, mis vastab andmepäringutele ja tagastab nõutud andmed. See kood läheb mudelisse.
- Views – see on kood, mis vastutab andmete vormindamise ja kuvamise eest. See kood kuvatakse vaatesse
Andmebaasi konfiguratsiooni sätted
Andmebaasiühenduse konfigureerimiseks toimige järgmiselt.
- Sirvi kausta ciopinionpoll
- avage andmebaas.php fail, mis asub kataloogis application/config.
- Otsige üles järgmised koodiread
- Määra kasutajanimeks root
- Määrake parooliks oma localhost root parool
- Määra andmebaasi nimeks opinion_poll. Pane tähele, et me kasutame eelmises tunnis loodud andmebaasi.
- Salvestage muudatused ja sulgege fail.
Meie mudeli loomine
Järgmisena loome mudeli, mis laiendab CI_Modeli. CI_Model on osa sellest. CodeSüütaja teegid. Mudel asub kaustas application/models. arvamus_küsitlus_mudel.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);
}
}
?>
SIIN,
- "Class Opinion_poll_model laiendab CI_Modelit..." on meie mudel, mis laiendab mudelit CI_Model
- „parent::__construct();” kutsub CI_Model konstruktorit
- "$this->load->database();" laadib andmebaasi teegi, et meie rakendus saaks andmebaasiga suhelda
- „$this->db->” on CodeSüütaja aktiivne kirje. Kontrolli seda link aktiivse kirje kohta lisateabe saamiseks.
Meie kontrolleri loomine
Loome nüüd kontrolleri. Kasutame vaikeseadet CodeSüütaja kontroller asub failis application/controllers/welcome.php. Asenda selle lähtekood järgmise koodiga.
<?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 */
?>
SIIN,
- "if (!defined('BASEPATH')) exit('Otsene skripti juurdepääs pole lubatud');" tagab, et kasutajad ei pääse otse kontrolleriklassile
- "class Welcome laiendab CI_Controlleri..." meie kontroller laiendab klassi CI_Controller
- „public function __construct()” kutsub CI_Controlleri klassi konstruktori meetodit ja laadib meie Opinion_poll_model mudeli
- „Public function index()…“ on funktsioon, mis seob faili index.php. See kasutab CodeIgniteri sisendklass kontrollib, kas hääl on esitatud, lisab selle andmebaasi ja kuvab seejärel tulemused. Kui sisendklassi post-massiiv on tühi, laaditakse hääletusleht.
- „$this->input->post('…')” on CodeSüütaja sisendklass, mis haarab globaalse muutuja $_POST sisu.
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))” kutsub hääle andmebaasi lisamiseks mudeli add_vote meetodit.
Meie vaadete loomine
Tuletage eelmisest näitest meelde, et meil oli kaks HTML-lehte, üks hääletamiseks ja teine tulemuste jaoks. Kasutame sama HTML-koodi minimaalsete muudatustega oma vaadete loomiseks. Looge järgmised failid kataloogi application/views
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>
Loome nüüd tulemuste lehe 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>
Meie rakenduse testimine
Eeldades, et teie rakenduse juurkataloog on ciopinionpoll, sirvige http://localhost/ciopinionpoll/
Ülalolev hääletusleht pärineb meie opinion_poll_form vaatest. Klõpsake nuppu OK ilma valikut valimata ja näete järgmist teavitussõnumit.
Hääleta oma lemmikraamatukogu poolt ja seejärel klõpsa nupul OK. Näed järgmist tulemuste lehte.
See kinnitab kolme kihi koostööd: kontroller võttis hääle vastu, mudel salvestas ja loendas selle ning vaade kuvas kogusummasid.








