CodeVoorbeeld van het Igniter MVC (Model View Controller) framework

โšก Slimme samenvatting

CodeHet Igniter MVC-framework verdeelt een applicatie in een model, een view en een controller. Het model verwerkt data en bedrijfslogica, de controller coรถrdineert verzoeken en de view presenteert het resultaat. Dit zorgt voor losse koppeling, flexibiliteit en een hogere productiviteit voor ontwikkelaars.

  • ???? ๏ธ Kernpatroon: MVC verdeelt een applicatie in model-, view- en controllercomponenten.
  • ๐Ÿ’พ Model: Communiceert met de gegevensbron en bevat de bedrijfslogica, vaak via Active Record.
  • ๏ธ controller: Luistert naar verzoeken, valideert invoer en coรถrdineert het model en de weergave.
  • ๐Ÿ–ผ๏ธ Toon: Presenteert gegevens in HTML, CSS en minimale PHP, zonder complexe logica.
  • ๐Ÿ”— Losse koppeling: De componenten werken onafhankelijk van elkaar, waardoor front-end- en back-end-ontwikkeling parallel kunnen lopen.
  • โšก Korte tags: CodeIgniter-views gebruiken doorgaans korte PHP echo-tags voor overzichtelijkere sjablonen.
  • ๐Ÿ” Aanvraagproces: Van controller naar model naar view, en vervolgens HTML terug naar de browser.

CodeIgniter MVC-framework

Wat is MVC?

MVC staat voor Model-View-Controller. Het is een architectuurpatroon dat de applicatie opsplitst in drie belangrijke componenten:

  1. Het model behandelt de bedrijfslogica en de interactie met de database.
  2. De controller coรถrdineert de activiteiten tussen het model en de weergave.
  3. View is verantwoordelijk voor de presentatie van de gegevens.

Hieronder volgen enkele voordelen van het MVC-architectuurpatroon:

  • Losse koppeling โ€“ de componenten bestaan โ€‹โ€‹en functioneren onafhankelijk van elkaar.
  • Flexibiliteit โ€“ u kunt eenvoudig wijzigingen aanbrengen in afzonderlijke componenten.
  • Verhoogde productiviteit โ€“ meerdere personen kunnen tegelijkertijd aan het project werken. Front-end ontwikkelaars kunnen zich richten op de weergave en presentatie, terwijl back-end ontwikkelaars zich concentreren op de modellen. Doordat het systeem losjes gekoppeld is, werkt alles uiteindelijk naadloos samen.

Model

Het model is verantwoordelijk voor de interactie met gegevensbronnen. Dit is meestal een database, maar het kan ook een service zijn die de gevraagde gegevens levert. Het is ook gebruikelijk om de bedrijfslogica in de modellen te plaatsen in plaats van in de controller. Deze werkwijze wordt vaak aangeduid als "dik model, dunne controller".

Het model schrijft doorgaans gegevens naar de database en biedt een mechanisme voor het bewerken, bijwerken en verwijderen van gegevens. In een moderne webapplicatie gebruiken modellen ontwerppatronen voor gegevenstoegang, zoals Active Record, om de interactie met de database te vereenvoudigen.

Bijvoorbeeld CodeIgniter maakt gebruik van een ingebouwde Active Record-bibliotheek ter ondersteuning van de modellen, terwijl andere frameworks zoals Laravel de Eloquent Object Relational Mapper (ORM) gebruiken voor gegevenstoegang.

Controller

De controller luistert naar binnenkomende verzoeken van gebruikers om resources. Hij fungeert als tussenpersoon tussen het model en de view en implementeert soms ook bepaalde bedrijfsregels. Stel dat de controller een verzoek ontvangt om een โ€‹โ€‹gebruiker in de database te registreren.

De controller kan de ingediende gegevens valideren om te controleren of alle vereiste parameters aanwezig zijn. Als er iets ontbreekt, wordt de gebruiker doorgestuurd naar de registratiepagina met een passende foutmelding. De controller kan het model ook vragen om aanvullende validatie uit te voeren, zoals controleren of het ingediende e-mailadres al bestaat. Als alle validatieregels slagen, stuurt de controller de gegevens naar het model voor verwerking en wacht op het antwoord.

Zodra het model de informatie heeft verwerkt en een positief antwoord heeft geretourneerd, laadt de controller de juiste weergave en geeft de door het model geretourneerde gegevens door als parameter.

Bekijk

De weergave behandelt gegevens die aan de eindgebruiker worden gepresenteerd. In webapplicaties bevatten weergaven vaak HTML, CSS en optioneel JavaScriptViews bevatten minimale programmeercode, meestal net genoeg om door verzamelingen gegevens te lopen die van het model zijn ontvangen, of een hulpfunctie voor het opschonen van gegevens of het maken van bewerkingslinks. De meeste moderne webapplicaties gebruiken sjabloonengines met hun eigen pseudocode-achtige syntaxis die ontwerpers kunnen begrijpen. Bij het werken met CodeIn Igniter is het gebruikelijk om korte PHP-tags en besturingsstructuren te gebruiken. Om iets weer te geven in CodeIgniter, je zou de volgende code kunnen gebruiken:

<?=$title?>

In tegenstelling tot:

<?php
echo $title;
?>

Besturingsstructuren worden doorgaans als volgt geschreven:

<?php foreach ($customers as $customer): ?>
<li>
<p><?=$customer->first_name?></p>
</li>
<?php endforeach; ?>

Zoals je in het bovenstaande voorbeeld kunt zien, maakt de weergave gebruik van een combinatie van PHP en HTML in plaats van alles in pure PHP-code te omsluiten.

Hoe MVC-frameworks werken

De volgende afbeelding laat zien hoe het MVC-framework werkt.

Hoe het MVC-framework werkt

Een controller ontvangt het verzoek van de gebruiker, communiceert indien nodig met het databasemodel en stuurt vervolgens het resultaat terug naar de browser in de vorm van HTML-code. De browser interpreteert deze code vervolgens in een voor mensen leesbaar formaat en toont deze aan de gebruiker.

CodeOntstekingscontroller

Laten we nu eens bekijken wat er gebeurde toen we de gegevens laadden. URL Open de webbrowser. Open het bestand Welcome.php controller in de map application/controllers. Je zou de volgende code moeten zien:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}

Hier:

  • defined('BASEPATH') OR exit('No direct script access allowed'); voorkomt directe toegang tot de controller als het verzoek niet via index.php binnenkwam. Dit is om veiligheidsredenen.
  • class Welcome extends CI_Controller {โ€ฆ} definieert de Welcome-controllerklasse en erft van de bovenliggende klasse CI_Controller.
  • public function index(){โ€ฆ} definieert de index-methode die reageert op de URL http://localhost:3000.
  • $this->load->view('welcome_message'); laadt de view welcome_message die zich in de map application/views bevindt.

We gaan de indexmethode nu als volgt bijwerken:

public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}

Hier:

  • $this->load->model('klanten_model'); laadt het klantenmodel.
  • $data['customer'] = $this->customers_model->get_customer(3); roept de get_customer-methode van customers_model aan en geeft de parameter 3 door. In dit voorbeeld hebben we de waarde vastgelegd, maar in echte applicaties zou dit een parameter uit de URI zijn.
  • $this->load->view('welcome_message',$data); laadt de welcome_message-weergave en geeft de variabele $data door.

CodeOntstekermodel

Laten we nu het model maken waarnaar in de bovenstaande code wordt verwezen. Voor de eenvoud zal ons model niet interageren met de databank maar dit levert een statisch klantrecord op. In de volgende tutorials werken we met databases. Maak een bestand Customers_model.php aan in application/models en voeg de volgende code toe:

<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}

Hier:

  • klasse Customers_model breidt CI_Model uit {โ€ฆ} definieert het model Customers_model dat CI_Model uitbreidt.
  • public function get_customer($id) {โ€ฆ} definieert de get_customer-methode op basis van een klant-ID.
  • $data[โ€ฆ] definieert de statische waarden van onze fictieve klant. Dit moet een rij uit de database zijn.
  • retourneer $ gegevens; retourneert de klantgegevens.

Dat was het voor ons model. Laten we nu de welcome_message-weergave aanpassen. Open welcome_message.php in:

application/views/welcome_message.php

Vervang de code door het volgende:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CodeIgniter MVC Basics</title>
</head>
<body>
<h1>Customer Details Card</h1>
<p>Customer ID : <strong><?=$customer['id']?></strong></p>
<p>First Name : <strong><?=$customer['first_name']?></strong></p>
<p>Last Name : <strong><?=$customer['last_name']?></strong></p>
<p>Address : <strong><?=$customer['address']?></strong></p>
</body>
</html>

Sla de wijzigingen op en laad het volgende. URL in de webbrowser: http://localhost:3000/U zou de klantenkaart moeten zien zoals weergegeven in de afbeelding hieronder.

Klantgegevenskaart weergegeven door Codeontsteker

Veelgestelde vragen

Het betekent dat de bedrijfslogica in het model is opgeslagen.ping De controller is compact en gericht op het routeren van verzoeken. Hierdoor is de logica herbruikbaar en is de controller gemakkelijker te lezen en te testen.

Een weergave moet alleen gegevens presenteren. Keeping De logica hierachter scheidt de verschillende aspecten, waardoor ontwerpers de lay-out kunnen aanpassen zonder de bedrijfsregels te beรฏnvloeden, en dezelfde gegevens in verschillende weergaven kunnen worden getoond.

Active Record is een ingebouwde querybuilder waarmee modellen de database kunnen lezen en schrijven met behulp van methodeaanroepen in plaats van ruwe SQL. Het helpt ook SQL-injectie te voorkomen door middel van esca.ping waarden.

AI kan op basis van een beschrijving van een functie overeenkomende controller-, model- en view-bestanden genereren en de naamgeving consistent houden. RevBekijk de gegenereerde query's en validatie voordat u ze uitvoert.

De korte `echo`-tag is een compacte manier om een โ€‹โ€‹waarde in een view af te drukken. Het volledige PHP-tagblok wordt gebruikt voor statements en controlestructuren. Beide zijn equivalent qua uitvoer, maar korte tags zorgen ervoor dat views overzichtelijker blijven.

Vat dit bericht samen met: