Opplæring i PHP MVC Framework
⚡ Smart oppsummering
PHP MVC Framework-design skiller applikasjonsdata og forretningslogikk fra presentasjon ved hjelp av modeller, visninger og kontrollere. CodeIgniter gjør dette mønsteret praktisk, slik at PHP-utviklere kan bygge sikre og vedlikeholdbare webapplikasjoner raskere.
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 frontruter (visning) som føreren (kontrolløren) bruker til å overvåke trafikken foran, og deretter øke hastigheten eller bremse (modell) avhengig av hva han ser foran.
La oss deretter se hvorfor et rammeverk bygget på dette mønsteret er verdt å bruke.
Hvorfor bruke PHP MVC Framework?
PHP MVC-rammeverk forenkler arbeidet med komplekse teknologier ved å:
- Skjuler alle de komplekse implementeringsdetaljene
- Tilbyr standardmetoder som vi kan bruke til å bygge applikasjonene våre
- Øker utviklerproduktiviteten, fordi basisimplementeringer av aktiviteter som å koble til databasen og rengjøre brukerinput allerede er delvis implementert.
- Oppmuntre til 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 brukerens forespørsler om ressurser fra serveren.
Som et eksempel, når brukeren ber om URL …/index.php?products=list, vil kontrolleren laste inn produktmodellen for å hente produktdataene, og deretter vise resultatene i listevisningen.
I et nøtteskall kobler kontrolleren modellene og visningene sammen avhengig av de forespurte ressursene.
Visninger – denne delen omhandler presentasjon av dataene 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, nå i sin fjerde hovedversjon (CodeIgniter 4). Den er lett og har en kort læringskurve. Den har et rikt sett med biblioteker som hjelper med å bygge nettsteder og applikasjoner raskt. Brukere med begrenset kunnskap om OOP-programmering kan også bruke den. Applikasjoner bygget med CodeTennapparat inkluderer;
|
|
Det er et sikkert og lett rammeverk for hierarkisk modellvisningskontroller (HMVC). OBS: Kohana ble offisielt avviklet i 2017; den siste stabile utgivelsen var 3.3.6 (juli 2016). Community fork Koseven fortsatte sin kodebase. Selskaper som brukte Kohana inkluderer; |
|
Den er modellert etter Ruby on Rails og vedlikeholdes aktivt (versjon 5.x). Den er kjent for konsepter som programvaredesignmønstre, konvensjon over konfigurasjon, ActiveRecord osv. CakePHP drevne applikasjoner inkluderer; |
|
|
Det er et kraftig rammeverk som er;
Det er ideelt for utviklingping forretningsapplikasjoner. I 2020 gikk Zend Framework over til Laminas Project med åpen kildekode. Zend/Laminas-drevne applikasjoner inkluderer;
Selskaper som har brukt Zend-rammeverket inkluderer;
|
PHP MVC Framework vs. vanlig PHP: Viktige forskjeller
Hva endrer egentlig et rammeverk i praksis? Vanlig PHP gir deg full frihet, men hvert prosjekt ender opp med å gjenoppfinne ruting, validering og databasetilgang fra bunnen av. Et PHP MVC-rammeverk standardiserer disse repeterende oppgavene, slik at koden din forblir konsistent på tvers av prosjekter og team.
| Aspekt | Vanlig PHP | PHP MVC-rammeverk |
|---|---|---|
| Code organisasjon | Blandet HTML, SQL og logikk i enkeltfiler | Delt inn i modeller, visninger og kontrollere |
| Databasetilgang | Håndskrevne spørsmål på hver side | Innebygd spørrebygger eller ORM med parameterbinding |
| Trygghet | Utvikleren må huske alle sikkerhetstiltak | Inkludert inndatafiltrering, XSS og CSRF-beskyttelse |
| Vedlikehold | Endringer sprer seg uforutsigbart gjennom filer | Hvert lag kan endres uavhengig |
👍 Tips: Bygg først et lite, enkelt PHP-prosjekt, som meningsmålingen nedenfor. Problemet med blandet kode gjør verdien av MVC-separasjon åpenbar.
Portering av meningsmålingsapplikasjonen til CodeTenner
I dette tutorial, opprettet vi et PHP-avstemningsprogram. Her vil vi portere den koden til CodeTenner
- Last ned den siste versjonen av CodeTennapparat fra deres nettside.
- ExtracLast innholdet i den zippede filen til utviklingskatalogen din i webserverkatalogen din. Vi bruker ciopinionpoll som mappenavn i denne leksjonen.
- Bla til URL http://localhost/ciopinionpoll/
Ocuco CodeIgniter-velkomstsiden ovenfor bekrefter at rammeverket er riktig installert. Vi skal nå portere meningsmålingsapplikasjonen vår til CodeIgniter. Husk at applikasjonen vår var delt inn i tre hovedkomponenter, nemlig;
- Frontkontroller – dette er delen som reagerer på URL forespør og returnerer den forespurte siden. Denne koden går inn i kontrolleren
- Modell – dette er koden som svarer på dataforespørsler og returnerer de forespurte dataene. Denne koden vil bli lagt inn i modellen
- Visninger – dette er koden som er ansvarlig for formatering og visning av dataene. Denne koden vil gå inn i visningen
Databasekonfigurasjonsinnstillinger
Slik konfigurerer du databasetilkoblingen:
- Bla til ciopinionpoll-mappen
- Åpne database.php filen som ligger i application/config-katalogen.
- Finn følgende kodelinjer
- Sett brukernavnet til root
- Sett passordet til ditt lokale verts root-passord
- Sett databasenavnet til opinion_poll. Merk at vi skal bruke databasen som ble opprettet i forrige leksjon.
- Lagre endringene og lukk filen.
Skaper vår modell
Deretter skal vi lage modellen vår som vil utvide CI_Model. CI_Model er en del av CodeIgniter-biblioteker. Modellen vil bli plassert i application/models opinion_poll_model.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);
}
}
?>
HER,
- "class Opinion_poll_model utvider CI_Model..." er vår modell som utvider CI_Model
- «parent::__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 historikk. Sjekk dette. link for mer informasjon om den aktive posten.
Opprette kontrolleren vår
La oss nå lage kontrolleren. Vi bruker standardverdien CodeIgniter-kontrolleren ligger i application/controllers/welcome.php. Erstatt kildekoden 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 klassekonstruktørmetode og laster inn vår Opinion_poll_model-modell
- «public function index()…» er funksjonen som er tilordnet index.php. Den bruker CodeIgniters input-klasse for å sjekke om en stemme er sendt inn, legge den til i databasen og deretter vise resultatene. Hvis post-arrayet til input-klassen er tomt, laster den inn stemmesiden.
- «$this->input->post('…')» er CodeIgniter-inputklasse som henter 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, én for avstemninger og én for resultater. Vi bruker den samme HTML-koden med minimale endringer for å lage visningene våre. Opprett følgende filer i mappen 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>
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 ciopinionpoll, bla til http://localhost/ciopinionpoll/
Avstemningssiden ovenfor kommer fra vår opinion_poll_form-visning. Klikk på OK uten å velge et alternativ, så vil du se følgende varselmelding.
Stem på favorittbiblioteket ditt, og klikk deretter på OK. Du vil se følgende resultatside.
Dette bekrefter at de tre lagene fungerer sammen: kontrolleren mottok avstemningen, modellen lagret og telte den, og visningen viste totalene.









