CodeIgniter MVC (Model View Controller) Framework met voorbeeld
Wat is MVC?
MVC-standaarden voor Model-View-Control. Het is een architectonisch patroon dat de applicatie opsplitst in drie hoofdcomponenten.
1. Model behandelt bedrijfslogica en database-interacties
2. Controller coördineert de activiteiten tussen het model en de weergave
3. View is verantwoordelijk voor de datapresentatie
Hieronder volgen enkele voordelen van het MVC-architectuurpatroon
- Losse koppeling: de componenten bestaan en functioneren onafhankelijk van elkaar.
- Flexibiliteit – men kan eenvoudig wijzigingen aanbrengen in afzonderlijke componenten
- Verhoogde productiviteit – meer dan één persoon kan tegelijkertijd aan het project werken. De front-end-ontwikkelaars kunnen werken aan weergaven en presentatie, terwijl back-end-ontwikkelaars zich kunnen concentreren op modellen en omdat het systeem losjes gekoppeld is, werkt het uiteindelijk
Model
Het model is verantwoordelijk voor de interactie met gegevensbronnen. Meestal is dit een database, maar het kan ook een dienst zijn die de gevraagde gegevens aanlevert. Het is ook gebruikelijk om de bedrijfslogica in de modellen te laten zitten, in tegenstelling tot de controller. Deze praktijk wordt meestal een skinny controller met een dik model genoemd.
Het model schrijft gegevens doorgaans in de database en biedt een mechanisme voor het bewerken, bijwerken en verwijderen van gegevens. In een moderne webapplicatie gebruiken modellen ontwerppatronen voor gegevenstoegang, zoals actieve records, om de interactie met de database eenvoudiger te maken.
CodeIgniter gebruikt bijvoorbeeld een ingebouwde bibliotheek Active Record om de modellen te ondersteunen, terwijl andere raamwerken zoals Laravel Eloquent Object Relational Mapper (ORM) gebruiken die de toegang tot gegevens ondersteunt.
Controller
De controller luistert naar binnenkomende verzoeken om bronnen van de gebruikers. Het fungeert als tussenpersoon tussen het model en de visie en implementeert soms ook enkele bedrijfsregels. Stel dat de controller een verzoek ontvangt om een gebruiker in de database te registreren.
De controller kan gegevensvalidatie uitvoeren op wat is ingediend om te verzekeren dat alle vereiste parameters zijn ingediend. Als er iets ontbreekt, wordt de gebruiker doorgestuurd naar de registratiepagina met het juiste foutbericht. De controller kan het model ook verzoeken om meer validatie uit te voeren door te controleren of het ingediende e-mailadres al bestaat. Als alle validatieregels slagen, dient de controller de gegevens in bij 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 JavaScript. Weergaven bevatten minimale programmeercode. De code in weergaven wordt meestal gebruikt om door verzamelingen gegevens te loopen die als parameters van het model of de helperfunctie zijn ontvangen om gegevens op te schonen of links te maken om de records te bewerken. De meeste moderne webapplicaties gebruiken meestal template-engines die hun eigen syntaxis definiëren, die meer op pseudocode lijkt en gemakkelijk door ontwerpers kan worden begrepen. Bij het werken met CodeIgniter is het gebruikelijk om korte PHP-tags en besturingsstructuren te gebruiken. Om iets in CodeIgniter weer te geven, kan men de volgende code gebruiken
<?=$title?>
In tegenstelling tot
<?php echo $title; ?>
Controlestructuren worden meestal als volgt geschreven
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
Zoals u in het bovenstaande voorbeeld kunt zien, gebruikt de weergave 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
Een controller ontvangt het verzoek van de gebruiker, communiceert indien nodig met het databasemodel en stuurt 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.
CodeIgniter-controller
Laten we nu eens kijken wat er net gebeurde toen we de bovenstaande URL in de webbrowser laadden.
Open het bestand Welcome.php controller met applicatie/controllers
U zou de volgende code moeten kunnen 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,
- gedefinieerd('BASEPATH') OR exit('Geen directe scripttoegang toegestaan'); verhindert directe toegang tot de controller als het verzoek niet via index.php binnenkomt. dit is voor veiligheidsdoeleinden.
- class Welcome breidt CI_Controller uit {…} definieert de Welcome-controllerklasse en breidt de bovenliggende klasse CI_Controller uit
- public function index(){…} definieert de indexmethode die reageert op de URL
http://localhost:3000
- $this->load->view('welkom_bericht'); laadt de view Welcome_message die zich in de map application/views bevindt
We zullen 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['klant'] = $this->customers_model->get_customer(3); roept de get_customer methode van customers_model aan en geeft parameter 3 door. In dit voorbeeld hebben we de waarde hard gecodeerd, maar in echte toepassingen zou dit een parameter uit de URI zijn.
- $this->load->view('welcome_message',$data); laadt de weergave Welcome_message en geeft de variabele $data door aan de weergave
CodeIgniter-model
Laten we nu de weergave maken waarnaar we in de bovenstaande code hebben verwezen. Voor de eenvoud zal ons model geen interactie hebben met de databank maar retourneert een statisch klantrecord. In de volgende tutorials zullen we met databases werken.
Maak een bestand Customers_model.php in applicatie/modellen
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 zijn die uit de database wordt geretourneerd.
- retourneer $ gegevens; retourneert de klantgegevens.
Dat wil zeggen, het is voor ons model. Laten we nu de welkomstberichtweergave aanpassen
Open Welcome_message.php gevestigd in
application/views/welcome_message.php
Vervang de code met 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
Laad de volgende URL in de webbrowser
http://localhost:3000/
U zou de klantenkaart moeten kunnen zien zoals weergegeven in de onderstaande afbeelding
Samenvatting
- MVC is een architectuurpatroon dat de applicatie opsplitst in drie hoofdcomponenten
- Het model is verantwoordelijk voor de interactie met gegevensbronnen
- De controller luistert naar binnenkomende verzoeken om bronnen van de gebruikers
- In webapplicaties bevatten weergaven vaak HTML, CSS en optioneel JavaScript
- Een controller ontvangt het verzoek van de gebruiker, communiceert indien nodig met het databasemodel en stuurt het resultaat vervolgens terug naar de browser in de vorm van HTML-code