CodeIgniter MVC (Model View Controller) Framework med eksempel
Hva er MVC?
MVC-standarder for Model-View-Control. Det er et arkitektonisk mønster som deler applikasjonen i tre hovedkomponenter.
1. Modell omhandler forretningslogikk og databaseinteraksjoner
2. Kontrolleren koordinerer aktivitetene mellom modellen og visningen
3. View er ansvarlig for datapresentasjon
Følgende er noen av fordelene med MVC arkitektoniske mønster
- Løs kobling -komponentene eksisterer og fungerer uavhengig av hverandre.
- Fleksibilitet – man kan enkelt gjøre endringer på individuelle komponenter
- Økt produktivitet – mer enn én person kan jobbe med prosjektet samtidig. Frontend-utviklerne kan jobbe med visninger og presentasjoner mens backend-utviklere kan fokusere på modeller, og siden systemet er løst koblet, fungerer det på slutten av dagen
Modell
Modellen er ansvarlig for å samhandle med datakilder. Dette er vanligvis en database, men det kan også være en tjeneste som gir de forespurte dataene. Det er også vanlig praksis å ha forretningslogikken i modellene i motsetning til kontrolleren. Denne praksisen kalles vanligvis fettmodell mager kontroller.
Modellen skriver vanligvis data inn i databasen, gir en mekanisme for redigering og oppdatering og sletting av data. I en moderne nettapplikasjon bruker modeller designmønstre for datatilgang som aktiv registrering for å gjøre interaksjon med databasen enklere.
For eksempel bruker CodeIgniter et innebygd bibliotek Active Record for å hjelpe modellene, mens andre rammeverk som Laravel bruker Eloquent Object Relational Mapper (ORM) som hjelper datatilgang.
controller
Kontrolleren lytter etter innkommende forespørsler om ressurser fra brukerne. Den fungerer som mellomleddet mellom modellen og utsikten og implementerer til tider også noen forretningsregler. La oss si at kontrolleren mottar en forespørsel om å registrere en bruker i databasen.
Den behandlingsansvarlige kan utføre datavalidering av det som er sendt inn for å sikre at alle nødvendige parametere er sendt inn. Hvis noe mangler, blir brukeren omdirigert til registreringssiden med riktig feilmelding. Kontrolløren kan også be om at modellen utfører mer validering ved å sjekke om den innsendte e-postadressen allerede eksisterer. Hvis alle valideringsregler passerer, sender kontrolløren dataene til modellen for prosess og venter på svaret.
Når modellen har behandlet informasjonen og returnert et positivt svar, laster kontrolleren den riktige visningen og sender inn dataene som returneres fra modellen som en parameter.
Se
Visningen omhandler data presentert for sluttbrukeren. I nettapplikasjoner inneholder visninger ofte HTML, CSS og eventuelt JavaScript. Visninger inneholder minimum programmeringskode. Koden i visninger brukes vanligvis til å gå gjennom samlinger av data mottatt som parametere fra modellen eller hjelpefunksjonen for å rydde opp i data eller lage lenker for å redigere postene. De fleste moderne nettapplikasjoner bruker vanligvis malmotorer som definerer sin egen syntaks som er mer som pseudokode og lett kan forstås av designere. Når du arbeider med CodeIgniter, er det vanlig praksis å bruke korte PHP-koder og kontrollstrukturer. For å vise noe i CodeIgniter, kan man bruke følgende kode
<?=$title?>
I motsetning til
<?php echo $title; ?>
Kontrollstrukturer er vanligvis skrevet som følger
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
Som du kan se fra eksemplet ovenfor, vil visningen bruke en kombinasjon av PHP og HTML i stedet for å omslutte alt i ren PHP-kode.
Hvordan fungerer MVC-rammeverk?
Følgende bilde viser MVC-rammeverket fungerer
En kontroller mottar forespørselen fra brukeren, samhandler med databasemodellen om nødvendig og returnerer deretter resultatet tilbake til nettleseren i form av HTML-kode som nettleseren tolket til et menneskelig lesbart format og vist til brukeren.
CodeIgniter-kontroller
La oss nå analysere hva som skjedde da vi lastet inn nettadressen ovenfor i nettleseren.
Åpne filen Welcome.php controller lokalisert applikasjon/kontrollere
Du skal 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 skripttilgang tillatt'); hindrer direkte tilgang til kontrolleren hvis forespørselen ikke kom gjennom index.php. dette er av sikkerhetshensyn.
- klassen Welcome utvider CI_Controller {...} definerer Welcome-kontrollerklassen og utvider den overordnede klassen CI_Controller
- public function index(){...} definerer indeksmetoden som svarer på URL-en
http://localhost:3000
- $this->load->view('welcome_message'); laster visningen velkomstmelding som ligger i program/visningskatalogen
Vi vil nå oppdatere 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('customers_model'); laster kundens modell.
- $data['customer'] = $this->customers_model->get_customer(3); kaller get_customer-metoden til customers_model og sender inn parameter 3. I dette eksemplet har vi hardkodet verdien, men i virkelige applikasjoner vil dette være en parameter fra URI.
- $this->load->view('welcome_message',$data); laster velkomstmeldingsvisningen og sender inn $data-variabelen til visningen
CodeIgniter modell
La oss nå lage visningen som vi refererte til i koden ovenfor. For enkelhets skyld vil ikke modellen vår samhandle med database men vil returnere en statisk kundepost. Vi vil jobbe med databaser i de neste veiledningene.
Lag en fil Customers_model.php i application/models
Legg til 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 utvider CI_Model {...} definerer modellen Customers_model som utvider CI_Model.
- offentlig funksjon get_customer($id) {...} definerer get kunde-metoden basert på en kunde-ID
- $data[...] definerer de statiske verdiene til vår fiktive kunde. Dette skal være en rad returnert fra databasen.
- returnere $data; returnerer kundedataene.
Det vil si det for vår modell. La oss nå endre velkomstmeldingen
Åpne welcome_message.php som ligger i
application/views/welcome_message.php
Bytt ut 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>
Lagre endringene
Last ned følgende URL i nettleseren
http://localhost:3000/
Du skal kunne se kundekortet som vist på bildet nedenfor
Oppsummering
- MVC er et arkitektonisk mønster som deler applikasjonen i tre hovedkomponenter
- Modellen er ansvarlig for å samhandle med datakilder
- Kontrolleren lytter etter innkommende forespørsler om ressurser fra brukerne
- I nettapplikasjoner inneholder visninger ofte HTML, CSS og eventuelt JavaScript
- En kontroller mottar forespørselen fra brukeren, samhandler med databasemodellen om nødvendig og returnerer deretter resultatet tilbake til nettleseren i form av HTML-kode