Handledning för PHP MVC Framework
⚡ Smart sammanfattning
PHP MVC Framework-design separerar applikationsdata och affärslogik från presentation med hjälp av modeller, vyer och kontroller. CodeIgniter gör detta mönster praktiskt, vilket låter PHP-utvecklare bygga säkra, underhållbara webbapplikationer snabbare.

Vad är PHP MVC-ramverket?
PHP MVC är ett applikationsdesignmönster som skiljer applikationsdata och affärslogik (modell) från presentationen (vyn). MVC står för Model, View & Controller.
Styrenheten förmedlar mellan modellerna och vyerna.
Tänk på MVC-designmönstret som en bil och förare.
Bilen har vindrutor (vy) som föraren (kontrollanten) använder för att övervaka trafiken framför, och sedan öka hastigheten eller bromsa (modell) beroende på vad hen ser framför sig.
Nu ska vi se varför ett ramverk byggt på detta mönster är värt att använda.
Varför använda PHP MVC Framework?
PHP MVC-ramverk förenklar arbetet med komplexa teknologier genom att:
- Döljer alla komplexa implementeringsdetaljer
- Tillhandahålla standardmetoder som vi kan använda för att bygga våra applikationer
- Ökad utvecklarproduktivitet, eftersom grundläggande implementeringar av aktiviteter som att ansluta till databasen och sanera användarinmatning redan är delvis implementerade.
- Uppmuntra efterlevnad av professionella kodningsstandarder
PHP MVC-designmönster
Låt oss nu kort diskutera varje komponent i MVC-designmönstret.
Modell – denna del handlar om affärslogiken och applikationsdata. Den kan användas för att utföra datavalidering, bearbeta data och lagra den. Uppgifterna kan komma från;
- platt fil
- databas
- XML-dokument
- Andra giltiga datakällor.
Regulator – det här är den del som hanterar användarens förfrågningar om resurser från servern.
Som exempel, när användaren begär URL …/index.php?products=list, kommer styrenheten att läsa in produktmodellen för att hämta produktdata och sedan visa resultaten i listvyn.
I ett nötskal länkar styrenheten ihop modellerna och vyerna beroende på de begärda resurserna.
Visningar – den här delen handlar om att presentera data för användaren. Detta är vanligtvis i form av HTML-sidor.
Typer av PHP MVC-ramverk
Att välja det bästa PHP-ramverket är en utmaning.
Du behöver inte skriva ditt eget ramverk för att dra nytta av fördelarna med MVC.
Du bör bara försöka skapa din egen MVC-relaterade applikationsdesign för att förstå hur MVC-ramverk fungerar.
När du väl är bekväm med hur MVC-ramverk fungerar, bör du gå vidare till de mogna och redan testade ramverken.
Tabellen nedan beskriver kortfattat några av de populära PHP-ramverken och de funktioner som varje ramverk erbjuder.
| Ramverk | BESKRIVNING |
|---|---|
|
|
Det är ett av de mest populära PHP MVC-ramverken, nu i sin fjärde huvudversion (CodeIgniter 4). Den är lätt och har en kort inlärningskurva. Den har en omfattande uppsättning bibliotek som hjälper till att snabbt bygga webbplatser och applikationer. Användare med begränsad kunskap om OOP-programmering kan också använda den. Applikationer byggda med CodeTändningsanordningen inkluderar;
|
|
Det är ett säkert och lättviktigt ramverk (HMVC) för hierarkisk modellvykontroller. Obs: Kohana lades officiellt ner 2017; dess senaste stabila utgåva var 3.3.6 (juli 2016). Communityforken Koseven fortsatte sin kodbas. Företag som använde Kohana inkluderar; |
|
Den är modellerad efter Ruby on Rails och underhålls aktivt (version 5.x). Den är känd för koncept som programvarudesignmönster, konvention framför konfiguration, ActiveRecord etc. CakePHP drivna applikationer inkluderar; |
|
|
Det är ett kraftfullt ramverk som är;
Det är idealiskt för utvecklingping affärsapplikationer. År 2020 övergick Zend Framework till Laminas Project med öppen källkod. Zend/Laminas-drivna applikationer inkluderar;
Företag som har använt Zend-ramverket inkluderar;
|
PHP MVC Framework vs Vanlig PHP: Viktiga skillnader
Vad förändrar egentligen ett ramverk i praktiken? Vanligt PHP ger dig fullständig frihet, men varje projekt slutar med att återuppfinna routing, validering och databasåtkomst från grunden. Ett PHP MVC-ramverk standardiserar dessa repetitiva uppgifter, så att din kod förblir konsekvent över projekt och team.
| Aspect | Vanlig PHP | PHP MVC-ramverk |
|---|---|---|
| Code organisation | Blandad HTML, SQL och logik i enskilda filer | Uppdelad i modeller, vyer och kontroller |
| Databasåtkomst | Handskrivna frågor på varje sida | Inbyggd frågebyggare eller ORM med parameterbindning |
| Säkerhet | Utvecklaren måste komma ihåg alla säkerhetsåtgärder | Inputfiltrering, XSS och CSRF-skydd ingår |
| Underhåll | Förändringar sprider sig oförutsägbart genom filer | Varje lager kan ändras oberoende av varandra |
👍 Dricks: Bygg först ett litet och enkelt PHP-projekt, som opinionsundersökningen nedan; smärtan med blandad kod gör värdet av MVC-separation uppenbart.
Portering av opinionsundersökningsapplikationen till Codeigniter
I detta handledning, skapade vi en PHP-omröstningsapplikation. Här kommer vi att portera den koden till Codeigniter
- Ladda ner den senaste versionen av CodeTändare från deras webbsajt.
- ExtracÖverför innehållet i den zippade filen till din utvecklingskatalog i din webbserverkatalog. Vi kommer att använda ciopinionpoll som mappnamn i den här lektionen.
- Bläddra till URL http://localhost/ciopinionpoll/
Ocuco-landskapet CodeIgniters välkomstsida ovan bekräftar att ramverket är korrekt installerat. Vi ska nu portera vår opinionsundersökningsapplikation till CodeTändare. Kom ihåg att vår applikation var uppdelad i tre huvudkomponenter, nämligen;
- Främre kontrollenhet – det här är den del som reagerar på URL begär och returnerar den begärda sidan. Denna kod kommer att matas in i kontrollenheten
- Modell – detta är koden som svarar på dataförfrågningar och returnerar den begärda datan. Denna kod kommer att läggas in i modellen
- Visningar – detta är koden som ansvarar för formatering och visning av data. Den här koden kommer in i vyn
Databaskonfigurationsinställningar
Så här konfigurerar du databasanslutningen:
- Bläddra till ciopinionpoll-mappen
- Öppna database.php filen som finns i katalogen application/config.
- Leta reda på följande kodrader
- Ställ in användarnamnet på root
- Ställ in lösenordet till ditt lokala root-lösenord
- Sätt databasens namn till opinion_poll. Observera att vi kommer att använda databasen som skapades i föregående lektion.
- Spara ändringarna och stäng filen.
Skapar vår modell
Härnäst ska vi skapa vår modell som kommer att utöka CI_Model. CI_Model är en del av CodeIgniter-bibliotek. Modellen kommer att finnas 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);
}
}
?>
HÄR,
- "class Opinion_poll_model utökar CI_Model..." är vår modell som utökar CI_Model
- "parent::__construct();" anropar CI_Model-konstruktorn
- "$this->load->databas();" laddar databasbiblioteket så att vår applikation kan interagera med databasen
- "$this->db->" är CodeIgniters aktiva register. Kontrollera detta länk för mer information om den aktiva posten.
Skapa vår kontrollant
Nu ska vi skapa kontrollenheten. Vi kommer att använda standardvärdet CodeIgniter-kontrollern finns i application/controllers/welcome.php. Ersätt dess källkod med följande kod.
<?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 */
?>
HÄR,
- "if (!defined('BASEPATH')) exit('Ingen direkt skriptåtkomst tillåten');" säkerställer att användare inte direkt kommer åt kontrollklassen
- "class Welcome utökar CI_Controller..." vår styrenhet utökar CI_Controller-klassen
- "public function __construct()" anropar CI_Controllers klasskonstruktormetod och laddar vår Opinion_poll_model-modell
- ”public function index()…” är funktionen som mappas till index.php. Den använder CodeIgniters input-klass för att kontrollera om en röst har skickats in, lägga till den i databasen och sedan visa resultaten. Om post-arrayen för input-klassen är tom laddas röstningssidan.
- "$this->input->post('…')" är CodeIgniter-indataklass som hämtar innehållet i den globala variabeln $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" anropar modellens add_vote-metod för att lägga till rösten i databasen.
Skapa våra åsikter
Kom ihåg från föregående exempel att vi hade två HTML-sidor, en för omröstningar och den andra för resultat. Vi kommer att använda samma HTML-kod med minimala modifieringar för att skapa våra vyer. Skapa följande filer i katalogen 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>
Låt oss nu skapa resultatsidan 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>
Testar vår applikation
Om du antar att rotkatalogen för din applikation är ciopinionpoll, bläddra till http://localhost/ciopinionpoll/
Omröstningssidan ovan kommer från vår opinion_poll_form-vy. Klicka på OK utan att välja ett alternativ, så ser du följande varningsmeddelande.
Rösta på ditt favoritbibliotek och klicka sedan på OK. Du kommer att se följande resultatsida.
Detta bekräftar att de tre lagren fungerar tillsammans: styrenheten tog emot rösten, modellen lagrade och räknade den, och vyn visade totalerna.








