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.

  • 🧩 Mønster: MVC opdeler en applikation i Model (data), View (præsentation) og Controller (anmodningshåndtering) for at opnå renere kode.
  • 🚀 Produktivitet: Frameworks leverer præbyggede biblioteker til databaseadgang, validering og inputrensning, så teams leverer funktioner hurtigere.
  • 🛠️ Valg: CodeIgniter, CakePHP og Laminas (tidligere Zend) forbliver aktive valg, mens Kohana blev udgået i 2017.
  • 🗄️ Model: In CodeIgniter, modeller udvider CI_Model og bruger Query Builder-metoder til sikre databaseoperationer.
  • 🎮 controller: Controllere udvider CI_Controller, læser brugerinput gennem inputklassen og indlæser den korrekte visning.
  • 📈 Indvirkning: Portering af en almindelig PHP poll-applikation viser, hvordan MVC-strukturen reducerer dobbeltarbejde og forenkler langsigtet vedligeholdelse.

PHP MVC Framework

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

Codetændsats


Codetændsats


https://codeigniter.com/

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;


kohana


kohana


http://kohanaframework.org

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;


CakePHP


CakePHP


www.cakephp.org

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;


Zend

https://getlaminas.org/


Zend (nu Laminas)

Det er en kraftfuld ramme, der er;

  • Sikker, pålidelig, hurtig og skalerbar
  • Understøtter oprettelsen af ​​webtjenester og API'er.

Det er ideelt til udviklingping forretningsapplikationer. I 2020 overgik Zend Framework til open source Laminas Project. Zend/Laminas-drevne applikationer inkluderer;

  • Pimcore CMS,
  • DotKernel.

Virksomheder, der har brugt Zend-frameworket, inkluderer;

  • BBC
  • Cisco
  • Webex
  • Offers.com

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 velkomstside vist efter extracrammerne

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

Indstillinger for databasekonfiguration i CodeIgniter database.php-fil

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

Meningsmålingsformular udleveret af CodeTændingsapplikation

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

Valideringsadvarselsmeddelelse vises, når der ikke er valgt nogen stemme

Stem på dit yndlingsbibliotek, og klik derefter på OK. Du vil se følgende resultatside.

Meningsmålingsresultatside, der viser antallet af stemmer pr. JavaScriptbibliotek

Dette bekræfter, at de tre lag arbejder sammen: controlleren modtog afstemningen, modellen gemte og talte den, og visningen viste totalerne.

Ofte Stillede Spørgsmål

HMVC (Hierarchical Model View Controller) organiserer en applikation i uafhængige MVC-triader, der kan kalde hinanden. Frameworks som f.eks. kohana populariserede HMVC, fordi det hjælper med at modularisere store applikationer.

Ja. Laravel er i øjeblikket det mest populære PHP MVC-framework. Det følger den samme Model-View-Controller-adskillelse, som er beskrevet her, og tilføjer værktøjer som Eloquent ORM- og Blade-skabelonerne.

Ja. Værktøjer som GitHub Copilot kan scaffolde modeller, controllere og visninger fra prompts. Du bør stadig gennemgå genereret kode for sikkerhedsproblemer såsom unescaped output og SQL-injektion.

Nej. AI-assistenter fremskynder skrivning af kode, men frameworks leverer stadig den testede struktur, sikkerhedsstandarder og konventioner, der sikrer, at applikationer vedligeholdes. De to fungerer bedst sammen.

Nej. Codetændsats er brugervenlig for udviklere med begrænset erfaring med objektorienteret programmering. Kendskab til klasser, metoder og grundlæggende arv er nok til at følge dens model- og controllermønstre.

Opsummer dette indlæg med: