PHP MVC Framework Tutorial
⚡ Smart opsummering
PHP MVC Framework-design adskiller applikationsdata og forretningslogik fra præsentation ved hjælp af modeller, visninger og controllere. CodeIgniter gør dette mønster praktisk, så PHP-udviklere hurtigere kan bygge sikre og vedligeholdelsesvenlige webapplikationer.
Hvad er PHP MVC framework?
PHP MVC er et applikationsdesignmønster, der adskiller applikationsdata og forretningslogik (model) fra præsentationen (visning). MVC står for Model, View & Controller.
Controlleren formidler mellem modellerne og visningerne.
Tænk på MVC-designmønsteret som en bil og chauffør.
Bilen har forruder (udsyn), som føreren (controlleren) bruger til at overvåge trafikken forude og derefter øge hastigheden eller bremse (model) afhængigt af, hvad han ser forude.
Lad os derefter se på, hvorfor et framework bygget på dette mønster er værd at bruge.
Hvorfor bruge PHP MVC Framework?
PHP MVC-frameworks forenkler arbejdet med komplekse teknologier ved at:
- Skjul alle de komplekse implementeringsdetaljer
- Tilvejebringelse af standardmetoder, som vi kan bruge til at bygge vores applikationer
- Øget udviklerproduktivitet, fordi basisimplementeringer af aktiviteter som at oprette forbindelse til databasen og rense brugerinput allerede er delvist implementeret.
- Fremme af overholdelse af professionelle kodningsstandarder
PHP MVC-designmønster
Lad os nu kort diskutere hver komponent i MVC-designmønsteret.
Model – denne del handler om forretningslogikken og applikationsdataene. Den kan bruges til at udføre datavalideringer, behandle data og gemme dem. Dataene kan komme fra;
- flad fil
- database
- XML-dokument
- Andre gyldige datakilder.
controller – dette er den del, der omhandler brugerens anmodninger om ressourcer fra serveren.
Som eksempel, når brugeren anmoder om URL …/index.php?products=list, vil controlleren indlæse produktmodellen for at hente produktdataene og derefter vise resultaterne i listevisningen.
I en nøddeskal forbinder controlleren modellerne og visningerne sammen afhængigt af de ønskede ressourcer.
Views – denne del omhandler præsentation af dataene for brugeren. Dette er normalt i form af HTML-sider.
Typer af PHP MVC-ramme
At vælge den bedste PHP-ramme er en udfordring.
Du behøver ikke at skrive din egen ramme for at få glæde af fordelene ved MVC.
Du bør kun forsøge at skabe dit eget MVC-relaterede applikationsdesign for at forstå, hvordan MVC-frameworks fungerer.
Når du er fortrolig med den måde, MVC-frameworks fungerer på, bør du gå videre til de modne og allerede testede rammer.
Tabellen nedenfor beskriver kort nogle af de populære PHP-frameworks og de funktioner, som hvert framework tilbyder.
| Framework | Beskrivelse |
|---|---|
|
|
Det er et af de mest populære PHP MVC-frameworks, nu i sin fjerde større version (CodeIgniter 4). Den er let og har en kort indlæringskurve. Den har et rigt sæt biblioteker, der hjælper med at bygge websteder og applikationer hurtigt. Brugere med begrænset viden om OOP-programmering kan også bruge den. Applikationer bygget med CodeTændingsenhed inkluderer;
|
|
Det er et sikkert og letvægts framework (HMVC) baseret på hierarkisk modelvisningscontroller. Bemærk: Kohana blev officielt udgået i 2017; dens sidste stabile udgivelse var 3.3.6 (juli 2016). Community fork Koseven fortsatte sin kodebase. Virksomheder, der brugte Kohana, inkluderer; |
|
Den er modelleret efter Ruby on Rails og vedligeholdes fortsat aktivt (version 5.x). Den er kendt for koncepter som softwaredesignmønstre, konvention frem for konfiguration, ActiveRecord osv. CakePHP drevne applikationer omfatter; |
|
|
Det er en kraftfuld ramme, der er;
Det er ideelt til udviklingping forretningsapplikationer. I 2020 overgik Zend Framework til open source Laminas Project. Zend/Laminas-drevne applikationer inkluderer;
Virksomheder, der har brugt Zend-frameworket, inkluderer;
|
PHP MVC Framework vs. almindelig PHP: Vigtigste forskelle
Hvad ændrer et framework egentlig i praksis? Almindelig PHP giver dig fuld frihed, men hvert projekt ender med at genopfinde routing, validering og databaseadgang fra bunden. Et PHP MVC framework standardiserer disse gentagne opgaver, så din kode forbliver ensartet på tværs af projekter og teams.
| Aspect | Almindelig PHP | PHP MVC Framework |
|---|---|---|
| Code organisation | Blandet HTML, SQL og logik i enkelte filer | Opdelt i modeller, visninger og controllere |
| Adgang til database | Håndskrevne forespørgsler på hver side | Indbygget forespørgselsbygger eller ORM med parameterbinding |
| Sikkerhed | Udvikleren skal huske alle sikkerhedsforanstaltninger | Inputfiltrering, XSS og CSRF-beskyttelse inkluderet |
| Vedligeholdelse | Ændringer spreder sig uforudsigeligt gennem filer | Hvert lag kan ændres uafhængigt |
💡 Tip: Byg først et lille, almindeligt PHP-projekt, ligesom meningsmålingen nedenfor; smerten ved blandet kode gør værdien af MVC-separation åbenlys.
Portering af meningsmålingapplikationen til Codetændsats
I denne tutorial, har vi lavet en PHP-afstemningsapplikation. Her vil vi portere den kode til Codetændsats
- Hent den nyeste version af CodeTændingsapparat fra deres internet side.
- ExtracOverfør indholdet af den zip-fil til din udviklingsmappe i din webservermappe. Vi bruger ciopinionpoll som mappenavn i denne lektion.
- Gå til URL http://localhost/ciopinionpoll/
CodeIgniter-velkomstsiden ovenfor bekræfter, at frameworket er installeret korrekt. Vi skal nu portere vores meningsmålingsprogram til CodeIgniter. Husk at vores applikation var opdelt i tre hovedkomponenter, nemlig;
- Frontcontroller – dette er den del, der reagerer på URL anmoder om og returnerer den ønskede side. Denne kode vil blive placeret i controlleren
- Model – dette er den kode, der svarer på dataanmodninger og returnerer de anmodede data. Denne kode vil blive indsat i modellen
- Visninger – dette er koden, der er ansvarlig for formatering og visning af dataene. Denne kode vil gå ind i visningen
Indstillinger for databasekonfiguration
Sådan konfigurerer du databaseforbindelsen:
- Gå til ciopinionpoll-mappen
- Åbne database.php filen, der er placeret i mappen application/config.
- Find følgende kodelinjer
- Indstil brugernavnet til root
- Indstil adgangskoden til din lokale værts root-adgangskode
- Indstil databasenavnet til opinion_poll. Bemærk, at vi bruger den database, der blev oprettet i den forrige lektion.
- Gem ændringerne og luk filen.
At skabe vores model
Dernæst skal vi oprette vores model, der vil udvide CI_Modellen. CI_Modellen er en del af CodeIgniter-biblioteker. Modellen vil være placeret 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 udvider CI_Model..." er vores model, der udvider CI_Model
- "parent::__construct();" kalder CI_Model-konstruktøren
- "$this->load->database();" indlæser databasebiblioteket, så vores applikation kan interagere med databasen
- "$this->db->" er CodeIgniters aktive registrering. Tjek dette link for mere information om den aktive post.
Oprettelse af vores controller
Lad os nu oprette controlleren. Vi bruger standardindstillingen CodeIgniter-controlleren findes i application/controllers/welcome.php. Erstat dens kildekode 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 scriptadgang tilladt');" sikrer, at brugerne ikke får direkte adgang til controllerklassen
- "class Welcome udvider CI_Controller..." vores controller udvider CI_Controller-klassen
- "public function __construct()" kalder CI_Controllers klassekonstruktørmetode og indlæser vores Opinion_poll_model-model
- “public function index()…” er den funktion, der knytter sig til index.php. Den bruger CodeIgniters inputklasse for at kontrollere, om en stemme er blevet indsendt, tilføje den til databasen og derefter vise resultaterne. Hvis post-arrayet for inputklassen er tomt, indlæses afstemningssiden.
- "$this->input->post('…')" er CodeIgniter-inputklasse, der henter indholdet af den globale variabel $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kalder modellens add_vote metode til at tilføje stemmen til databasen.
Oprettelse af vores synspunkter
Husk fra det forrige eksempel, at vi havde to HTML-sider, en til afstemninger og den anden til resultater. Vi vil bruge den samme HTML-kode med minimale ændringer til at oprette vores views. Opret 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>
Lad os nu oprette 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>
Tester vores applikation
Hvis du antager, at rodmappen på din applikation er ciopinionpoll, skal du gå til http://localhost/ciopinionpoll/
Afstemningssiden ovenfor kommer fra vores opinion_poll_form-visning. Klik på OK uden at vælge en mulighed, og du vil se følgende advarselsmeddelelse
Stem på dit yndlingsbibliotek, og klik derefter på OK. Du vil se følgende resultatside.
Dette bekræfter, at de tre lag arbejder sammen: controlleren modtog afstemningen, modellen gemte og talte den, og visningen viste totalerne.









