CodeIgniter MVC (Model View Controller) Framework med eksempel
Hvad er MVC?
MVC-standarder for Model-View-Control. Det er et arkitektonisk mønster, der deler applikationen op i tre hovedkomponenter.
1. Model omhandler forretningslogik og databaseinteraktioner
2. Controller koordinerer aktiviteterne mellem modellen og visningen
3. View er ansvarlig for datapræsentation
Følgende er nogle af fordelene ved MVC arkitektoniske mønster
- Løs kobling - komponenterne eksisterer og fungerer uafhængigt af hinanden.
- Fleksibilitet – man kan nemt foretage ændringer på individuelle komponenter
- Øget produktivitet – mere end én person kan arbejde på projektet på samme tid. Frontend-udviklerne kan arbejde med visninger og præsentationer, mens backend-udviklere kan fokusere på modeller, og da systemet er løst koblet, fungerer det i slutningen af dagen
Model
Modellen er ansvarlig for at interagere med datakilder. Dette er normalt en database, men det kan også være en tjeneste, der leverer de ønskede data. Det er også almindelig praksis at have forretningslogikken indeholdt i modellerne i modsætning til controlleren. Denne praksis kaldes normalt fedt model skinny controller.
Modellen skriver normalt data ind i databasen, giver en mekanisme til redigering og opdatering og sletning af data. I en moderne webapplikation bruger modeller dataadgangsdesignmønstre såsom aktiv registrering for at gøre interaktion med databasen nemmere.
For eksempel bruger CodeIgniter et indbygget bibliotek Active Record til at hjælpe modellerne, mens andre rammer såsom Laravel bruger Eloquent Object Relational Mapper (ORM), der hjælper dataadgang.
controller
Controlleren lytter efter indkommende anmodninger om ressourcer fra brugerne. Det fungerer som mellemled mellem modellen og udsigten og implementerer til tider også nogle forretningsregler. Lad os sige, at controlleren modtager en anmodning om at registrere en bruger i databasen.
Den registeransvarlige kan udføre datavalidering af det, der er blevet indsendt for at sikre, at alle de nødvendige parametre er blevet indsendt. Hvis der mangler noget, bliver brugeren omdirigeret til registreringssiden med den relevante fejlmeddelelse vist. Controlleren kan også anmode modellen om at udføre mere validering ved at kontrollere, om den indsendte e-mailadresse allerede eksisterer. Hvis alle valideringsregler passerer, sender controlleren dataene til modellen til proces og venter på svaret.
Når modellen har behandlet informationen og returneret et positivt svar, indlæser controlleren den relevante visning og sender dataene tilbage fra modellen som en parameter.
Specifikation
Visningen omhandler data præsenteret for slutbrugeren. I webapplikationer indeholder visninger ofte HTML, CSS og evt JavaScript. Visninger indeholder minimum programmeringskode. Koden indeholdt i visninger bruges normalt til at gå gennem samlinger af data modtaget som parametre fra modellen eller hjælpefunktionen til at rydde op i data eller oprette links til at redigere posterne. De fleste moderne webapplikationer bruger normalt skabelonmotorer, der definerer deres egen syntaks, som er mere som pseudokode og let kan forstås af designere. Når du arbejder med CodeIgniter, er det almindelig praksis at bruge korte PHP-tags og kontrolstrukturer. For at vise noget i CodeIgniter, kan man bruge følgende kode
<?=$title?>
I modsætning til
<?php echo $title; ?>
Kontrolstrukturer er normalt skrevet som følger
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
Som du kan se fra ovenstående eksempel, vil visningen bruge en kombination af PHP og HTML i stedet for at omslutte alt i ren PHP-kode.
Hvordan fungerer MVC-frameworks?
Følgende billede viser MVC-rammen fungerer
En controller modtager anmodningen fra brugeren, interagerer med databasemodellen, hvis det er nødvendigt, og returnerer derefter resultatet tilbage til browseren i form af HTML-kode, som browseren fortolkede i et menneskeligt læsbart format og viste til brugeren.
CodeIgniter Controller
Lad os nu opdele, hvad der lige skete, da vi indlæste ovenstående URL i webbrowseren.
Åbn filen Welcome.php controller placeret applikation/controllere
Du burde kunne se følgende kode
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
HER,
- defined('BASEPATH') OR exit('Ingen direkte scriptadgang tilladt'); forhindrer direkte adgang til controlleren, hvis anmodningen ikke kom gennem index.php. dette er af sikkerhedsmæssige årsager.
- klasse Welcome udvider CI_Controller {...} definerer Welcome controller-klassen og udvider forældreklassen CI_Controller
- public function index(){...} definerer indeksmetoden, der svarer på URL'en
http://localhost:3000
- $this->load->view('welcome_message'); indlæser visningen welcome_message, der er placeret i application/views-mappen
Vi vil nu opdatere indeksmetoden som følger
public function index() { $this->load->model('customers_model'); $data['customer'] = $this->customers_model->get_customer(3); $this->load->view('welcome_message',$data); }
HER,
- $this->load->model('kundermodel'); indlæser kundens model.
- $data['customer'] = $this->customers_model->get_customer(3); kalder get_customer-metoden for customers_model og sender parameter 3 ind. I dette eksempel har vi hårdkodet værdien, men i virkelige applikationer ville dette være en parameter fra URI'en.
- $this->load->view('welcome_message',$data); indlæser welcome_message-visningen og sender $data-variablen til visningen
CodeIgniter model
Lad os nu skabe den visning, som vi refererede til i ovenstående kode. For nemheds skyld vil vores model ikke interagere med database men vil returnere en statisk kundepost. Vi vil arbejde med databaser i de næste øvelser.
Opret en fil Customers_model.php i application/models
Tilføj følgende kode
<?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; } }
HER,
- klasse Customers_model udvider CI_Model {...} definerer modellen Customers_model, der udvider CI_Model.
- offentlig funktion get_customer($id) {...} definerer get kunde-metoden baseret på et kunde-id
- $data[...] definerer de statiske værdier for vores fiktive kunde. Dette skal være en række, der returneres fra databasen.
- returnere $data; returnerer kundedata.
Altså det til vores model. Lad os nu ændre velkomstmeddelelsesvisningen
Åbn welcome_message.php placeret i
application/views/welcome_message.php
Udskift koden med følgende
<!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>
Gem ændringerne
Indlæs følgende URL i webbrowseren
http://localhost:3000/
Du skal kunne se kundekortet som vist på billedet nedenfor
Resumé
- MVC er et arkitektonisk mønster, der deler applikationen op i tre hovedkomponenter
- Modellen er ansvarlig for at interagere med datakilder
- Controlleren lytter efter indkommende anmodninger om ressourcer fra brugerne
- I webapplikationer indeholder visninger ofte HTML, CSS og evt JavaScript
- En controller modtager anmodningen fra brugeren, interagerer med databasemodellen om nødvendigt og returnerer derefter resultatet tilbage til browseren i form af HTML-kode