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.

  • 🧩 Mönster: MVC delar upp en applikation i Model (data), View (presentation) och Controller (förfrågningshantering) för renare kod.
  • 🚀 Produktivitet: Ramverk levererar förbyggda bibliotek för databasåtkomst, validering och sanering av indata, så att team levererar funktioner snabbare.
  • 🛠️ Tillval: CodeIgniter, CakePHP och Laminas (tidigare Zend) är fortfarande aktiva val, medan Kohana lades ner 2017.
  • 🗄️ Artikelnummer : In CodeIgniter, modeller utökar CI_Model och använder Query Builder-metoder för säkra databasoperationer.
  • 🎮 Kontroller: Kontroller utökar CI_Controller, läser användarinmatning genom input-klassen och laddar rätt vy.
  • 📈 Inverkan: Att porta en vanlig PHP-pollapplikation visar hur MVC-strukturen minskar dubbelarbete och förenklar långsiktigt underhåll.

PHP MVC-ramverk

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

Codeigniter


Codeigniter


https://codeigniter.com/

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;


kohana


kohana


http://kohanaframework.org

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;


CakePHP


CakePHP


www.cakephp.org

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;


Zend

https://getlaminas.org/


Zend (nu Laminas)

Det är ett kraftfullt ramverk som är;

  • Säker, pålitlig, snabb och skalbar
  • Stöder skapandet av webbtjänster och API:er.

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;

  • Pimcore CMS,
  • DotKernel.

Företag som har använt Zend-ramverket inkluderar;

  • BBC
  • Cisco
  • WebEx
  • Offers.com

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/

CodeVälkomstsidan för Igniter visas efter extracramverket

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

Inställningar för databaskonfiguration i CodeIgniter database.php-fil

  • 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/

Opinionsundersökningsröstningsblankett utfärdad av CodeTändningsapplikation

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.

Valideringsmeddelande visas när ingen röst har valts

Rösta på ditt favoritbibliotek och klicka sedan på OK. Du kommer att se följande resultatsida.

Resultatsida för opinionsundersökningar som visar röstantal per JavaSkriptbibliotek

Detta bekräftar att de tre lagren fungerar tillsammans: styrenheten tog emot rösten, modellen lagrade och räknade den, och vyn visade totalerna.

Vanliga frågor

HMVC (Hierarchical Model View Controller) organiserar en applikation i oberoende MVC-triader som kan anropa varandra. Ramverk som kohana populariserade HMVC eftersom det hjälper till att modularisera stora applikationer.

Ja. laravel är för närvarande det mest populära PHP MVC-ramverket. Det följer samma Model-View-Controller-separation som beskrivs här, med tillägg av verktyg som mallarna Eloquent ORM och Blade.

Ja. Verktyg som GitHub Copilot kan scaffolda modeller, kontroller och vyer från prompter. Du bör fortfarande granska genererad kod för säkerhetsproblem som oescaped utdata och SQL-injektion.

Nej. AI-assistenter snabbar upp kodskrivningen, men ramverk tillhandahåller fortfarande den testade strukturen, säkerhetsstandarderna och konventionerna som gör att applikationer kan underhållas. De två fungerar bäst tillsammans.

Nej. Codeigniter är vänligt för utvecklare med begränsad erfarenhet av objektorienterad programmering. Att känna till klasser, metoder och grundläggande arv är tillräckligt för att följa dess modell och kontrollmönster.

Sammanfatta detta inlägg med: