PHP MVC Framework-zelfstudie

โšก Slimme samenvatting

Het PHP MVC-framework scheidt applicatiegegevens en bedrijfslogica van de presentatie door gebruik te maken van modellen, weergaven en controllers. CodeIgniter maakt dit patroon praktisch toepasbaar, waardoor PHP-ontwikkelaars sneller veilige en onderhoudbare webapplicaties kunnen bouwen.

  • ๐Ÿงฉ Patroon: MVC verdeelt een applicatie in Model (data), View (presentatie) en Controller (verzoekafhandeling) voor een overzichtelijkere code.
  • ๐Ÿš€ Productiviteit: Frameworks bieden vooraf gebouwde bibliotheken voor database-toegang, validatie en het opschonen van invoergegevens, waardoor teams sneller functionaliteiten kunnen leveren.
  • ๏ธ Opties: CodeIgniter, CakePHP en Laminas (voorheen Zend) zijn nog steeds actieve opties, terwijl Kohana in 2017 is stopgezet.
  • ๏ธ Model: In CodeIgniter-modellen breiden CI_Model uit en gebruiken Query Builder-methoden voor veilige databasebewerkingen.
  • ๐ŸŽฎ controller: Controllers erven van CI_Controller, lezen gebruikersinvoer via de input-klasse en laden de juiste weergave.
  • ๐Ÿ“ˆ Impact: Het overzetten van een eenvoudige PHP-enquรชteapplicatie laat zien hoe de MVC-structuur dubbel werk voorkomt en het onderhoud op lange termijn vereenvoudigt.

PHP MVC-framework

Wat is een PHP MVC-framework?

PHP MVC is een applicatieontwerppatroon dat de applicatiegegevens en bedrijfslogica (model) scheidt van de presentatie (weergave). MVC staat voor Model, View & Controller.

De controller bemiddelt tussen de modellen en views.

Beschouw het MVC-ontwerppatroon als een auto en de bestuurder.

De auto heeft voorruiten (zicht) waarmee de bestuurder (controller) het verkeer voor zich in de gaten houdt en vervolgens gas geeft of remt (model), afhankelijk van wat hij voor zich ziet.

Laten we vervolgens eens kijken waarom een โ€‹โ€‹framework dat op dit patroon is gebaseerd, de moeite waard is om te gebruiken.

Waarom PHP MVC Framework gebruiken?

PHP MVC-frameworks vereenvoudigen het werken met complexe technologieรซn door:

  • Het verbergen van alle complexe implementatiedetails
  • Het aanbieden van standaardmethoden die we kunnen gebruiken om onze applicaties te bouwen.
  • Verhoogde productiviteit van ontwikkelaars, omdat basisimplementaties van activiteiten zoals het verbinden met de database en het valideren van gebruikersinvoer al gedeeltelijk zijn geรฏmplementeerd.
  • Het stimuleren van nale adherence aan professionele codeerstandaarden

PHP MVC-ontwerppatroon

Laten we nu kort elk onderdeel van het MVC-ontwerppatroon bespreken.

Model โ€“ dit deel gaat over de bedrijfslogica en de applicatiegegevens. Het kan worden gebruikt om gegevensvalidaties uit te voeren, gegevens te verwerken en op te slaan. De gegevens kunnen afkomstig zijn van;

  • plat bestand
  • databank
  • XML-document
  • Andere geldige gegevensbronnen.

Controller โ€“ Dit is het gedeelte dat de verzoeken van de gebruiker om resources van de server afhandelt.

Als voorbeeld: wanneer de gebruiker een verzoek indient URL โ€ฆ/index.php?products=lijstDe controller laadt het productmodel om de productgegevens op te halen en geeft de resultaten vervolgens weer in de lijstweergave.

Kort gezegd koppelt de controller de modellen en views aan elkaar, afhankelijk van de gevraagde bronnen.

Weergaves โ€“ Dit onderdeel gaat over het presenteren van de gegevens aan de gebruiker. Dit gebeurt meestal in de vorm van HTML-pagina's.

Soorten PHP MVC-framework

Het selecteren van het beste PHP-framework is een uitdaging.

U hoeft geen eigen raamwerk te schrijven om te profiteren van de voordelen van MVC.

Probeer alleen uw eigen MVC-gerelateerde applicatieontwerp te maken om te begrijpen hoe MVC-frameworks werken.

Als u eenmaal vertrouwd bent met de manier waarop MVC-frameworks werken, moet u overstappen op de volwassen en reeds geteste frameworks.

De onderstaande tabel beschrijft kort enkele populaire PHP-frameworks en de functies die elk framework biedt.

Kader Beschrijving

Codeontsteker


Codeontsteker


https://codeigniter.com/

Het is een van de populairste PHP MVC-frameworks, inmiddels in de vierde grote versie (CodeIgniter 4). Het is lichtgewicht en heeft een korte leercurve. Het beschikt over een uitgebreide set bibliotheken waarmee snel websites en applicaties kunnen worden gebouwd. Gebruikers met beperkte kennis van OOP-programmering kunnen het ook gebruiken. Applicaties die met Igniter zijn gebouwd, kunnen snel worden gebruikt. CodeOntstekers omvatten;


kohana


kohana


http://kohanaframework.org

Het is een veilig en lichtgewicht framework gebaseerd op het Hierarchical Model View Controller (HMVC)-principe. Let op: Kohana werd officieel stopgezet in 2017; de laatste stabiele release was 3.3.6 (juli 2016). De community-fork Koseven zette de codebase voort. Bedrijven die Kohana gebruikten zijn onder andere:


CakePHP


CakePHP


www.cakephp.org

Het is gebaseerd op Ruby on Rails en wordt nog steeds actief onderhouden (versie 5.x). Het staat bekend om concepten zoals softwareontwerppatronen, 'convention over configuration', ActiveRecord, enzovoort. CakePHP aangedreven toepassingen omvatten;


Zend

https://getlaminas.org/


Zend (nu Laminas)

Het is een krachtig raamwerk dat is;

  • Veilig, betrouwbaar, snel en schaalbaar
  • Ondersteunt de ontwikkeling van webservices en API's.

Het is ideaal voor ontwikkelingping zakelijke toepassingen. In 2020 is Zend Framework overgegaan naar het open-source Laminas-project. Toepassingen die draaien op Zend/Laminas zijn onder andere:

  • Pimcore CMS,
  • DotKernel.

Bedrijven die het Zend-framework hebben gebruikt, zijn onder andere:

  • BBC
  • Cisco
  • Webex
  • Aanbiedingen.com

PHP MVC-framework versus pure PHP: belangrijkste verschillen

Wat verandert een framework nu eigenlijk in de praktijk? Pure PHP geeft je volledige vrijheid, maar elk project komt neer op het volledig opnieuw uitvinden van routing, validatie en database-toegang. Een PHP MVC-framework standaardiseert deze repetitieve taken, waardoor je code consistent blijft in verschillende projecten en teams.

Aspect Eenvoudige PHP PHP MVC-framework
Code organisatie Een mix van HTML, SQL en logica in รฉรฉn bestand. Onderverdeeld in modellen, weergaven en controllers.
Database toegang Handgeschreven vragen op elke pagina Ingebouwde querybuilder of ORM met parameterbinding
Security De ontwikkelaar moet alle veiligheidsvoorschriften in acht nemen. Inclusief inputfiltering, XSS- en CSRF-bescherming.
Onderhoud Wijzigingen verspreiden zich op onvoorspelbare wijze door bestanden. Elke laag kan onafhankelijk van elkaar veranderen.

๐Ÿ‘ Tip: Bouw eerst een klein, eenvoudig PHP-project, zoals de onderstaande opiniepeiling; de problemen met gemengde code maken de waarde van MVC-scheiding duidelijk.

De opiniepeilingapplicatie overzetten naar Codeontsteker

In deze zelfstudieWe hebben een PHP-enquรชteapplicatie gemaakt. Hier zullen we die code overzetten naar... Codeontsteker

  • Downloaden de nieuwste versie van CodeOntsteker van hun website.
  • ExtracKopieer de inhoud van het gezipte bestand naar je ontwikkelmap in de map van je webserver. We gebruiken in deze les 'ciopinionpoll' als mapnaam.
  • Blader naar het URL http://localhost/ciopinionpoll/

CodeDe welkomstpagina van Igniter wordt weergegeven na extrachet raamwerk

De CodeDe welkomstpagina van Igniter hierboven bevestigt dat het framework correct is geรฏnstalleerd. We gaan nu onze opiniepeilingapplicatie overzetten naar Igniter. CodeOntsteker. Zoals u zich wellicht herinnert, was onze applicatie opgedeeld in drie hoofdonderdelen, namelijk:

  • Voorste controller โ€“ dit is het onderdeel dat reageert op URL De code wordt in de controller geplaatst en retourneert de gevraagde pagina.
  • Model โ€“ dit is de code die reageert op dataverzoeken en de gevraagde data retourneert. Deze code komt in het model te staan.
  • Weergaven โ€“ dit is de code die verantwoordelijk is voor het opmaken en weergeven van de gegevens. Deze code wordt in de weergave weergegeven

Instellingen voor databaseconfiguratie

Om de databaseverbinding te configureren:

  • Navigeer naar de map ciopinionpoll
  • Open de database.php Het bestand bevindt zich in de map application/config.
  • Zoek de volgende coderegels

Databaseconfiguratie-instellingen in CodeIgniter database.php-bestand

  • Stel de gebruikersnaam in op root
  • Stel het wachtwoord in op het root-wachtwoord van uw lokale host.
  • Stel de databasenaam in op opinion_poll. Let op: we gebruiken de database die in de vorige les is aangemaakt.
  • Sla de wijzigingen op en sluit het bestand.

Ons model creรซren

Vervolgens gaan we ons eigen model maken dat het CI_Model uitbreidt. Het CI_Model maakt deel uit van de CodeIgniter-bibliotheken. Het model bevindt zich in de map application/models. opiniepeiling_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);
    }
}
?>

HIER,

  • "class Opinion_poll_model breidt CI_Model uit..." is ons model dat het CI_Model uitbreidt
  • โ€œparent::__construct();โ€ roept de CI_Model-constructor aan.
  • โ€œ$dit->laden->database();โ€ laadt de databasebibliotheek zodat onze applicatie kan communiceren met de database
  • โ€œ$this->db->โ€ is CodeHet actieve dossier van Igniter. Bekijk dit. link voor meer informatie over het actieve record.

Onze controller maken

Laten we nu de controller aanmaken. We gebruiken de standaardinstellingen. CodeDe Igniter-controller bevindt zich in application/controllers/welcome.php. Vervang de broncode door de volgende code.

<?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 */
?>

HIER,

  • โ€œif (!gedefinieerd('BASEPATH')) exit('Geen directe scripttoegang toegestaan');โ€ zorgt ervoor dat gebruikers niet rechtstreeks toegang krijgen tot de controllerklasse
  • "class Welcome breidt CI_Controller uit..." onze controller breidt de klasse CI_Controller uit
  • De functie `public function __construct()` roept de constructormethode van de klasse `CI_Controller` aan en laadt ons `Opinion_poll_model` model.
  • โ€œpublic function index()โ€ฆโ€ is de functie die verwijst naar index.php. Deze functie gebruikt CodeDe inputklasse van Igniter controleert of er een stem is uitgebracht, voegt deze toe aan de database en toont vervolgens de resultaten. Als de post-array van de inputklasse leeg is, wordt de stempagina geladen.
  • โ€œ$this->input->post('โ€ฆ')โ€ is de CodeIgniter-inputklasse die de inhoud van de globale variabele $_POST ophaalt.
  • โ€œ$this->opinion_poll_model->add_vote($this->input->post('vote'))โ€ roept de add_vote-methode van het model aan om de stem aan de database toe te voegen.

Onze opvattingen creรซren

Zoals we in het vorige voorbeeld zagen, hadden we twee HTML-pagina's: รฉรฉn voor het stemmen en รฉรฉn voor de resultaten. We gebruiken dezelfde HTML-code, met minimale aanpassingen, om onze weergaven te maken. Maak de volgende bestanden aan in de map 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>

Laten we nu de resultatenpagina results.php maken

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

Onze applicatie testen

Ervan uitgaande dat de hoofdmap van uw applicatie ciopinionpoll is, navigeer dan naar http://localhost/ciopinionpoll/

Opiniepeiling stemformulier weergegeven door de CodeOntstekertoepassing

De bovenstaande stempagina is afkomstig van onze opinion_poll_form-weergave. Klik op OK zonder een optie te selecteren en u ziet het volgende waarschuwingsbericht.

Validatiewaarschuwing wordt weergegeven wanneer er geen stem is geselecteerd.

Stem op je favoriete bibliotheek en klik vervolgens op OK. Je ziet dan de volgende resultatenpagina.

Pagina met de resultaten van de opiniepeiling, waarop het aantal stemmen per JavaScriptbibliotheek

Dit bevestigt dat de drie lagen samenwerken: de controller ontving de stem, het model sloeg deze op en telde hem, en de weergave toonde de totalen.

Veelgestelde vragen

HMVC (Hierarchical Model View Controller) organiseert een applicatie in onafhankelijke MVC-triades die elkaar kunnen aanroepen. Frameworks zoals kohana HMVC is populair geworden omdat het helpt bij het modulariseren van grote applicaties.

Ja. Laravel is momenteel het populairste PHP MVC-framework. Het volgt dezelfde Model-View-Controller-structuur als hier beschreven, en voegt tools toe zoals de Eloquent ORM en Blade-templates.

Ja. Hulpmiddelen zoals GitHub-copiloot Je kunt modellen, controllers en views genereren vanuit prompts. Je moet de gegenereerde code echter nog steeds controleren op beveiligingsproblemen zoals niet-geรซscapte uitvoer en SQL-injectie.

Nee. AI-assistenten versnellen het schrijven van code, maar frameworks bieden nog steeds de beproefde structuur, standaardbeveiligingsinstellingen en conventies die ervoor zorgen dat applicaties onderhoudbaar blijven. De twee werken het beste samen.

Nee. Codeontsteker Het is gebruiksvriendelijk voor ontwikkelaars met beperkte ervaring in objectgeoriรซnteerd programmeren. Kennis van klassen, methoden en basisovererving is voldoende om de model- en controllerpatronen te volgen.

Vat dit bericht samen met: