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: CodeIgniter bruger et indbygget bibliotek, Active Record, til at understรธtte modellerne, mens andre frameworks som Laravel bruger Eloquent Object Relational Mapper (ORM), der hjรฆlper med 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.

Se

Visningen omhandler data prรฆsenteret for slutbrugeren. I webapplikationer indeholder visninger ofte HTML, CSS og evt JavaScriptVisninger indeholder minimal programmeringskode. Koden i visninger bruges normalt til at gennemgรฅ datasamlinger modtaget som parametre fra modellen eller hjรฆlpefunktionen for at rydde op i data eller oprette links til redigering af poster. De fleste moderne webapplikationer bruger normalt skabelonmotorer, der definerer deres egen syntaks, som mere ligner pseudokode og let kan forstรฅs af designere. Nรฅr man arbejder med CodeIgniter, det er almindelig praksis at bruge korte PHP-tags og kontrolstrukturer. For at vise noget i CodeIgniter, man kan 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

MVC Frameworks 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.

CodeTรฆndingscontroller

Lad os nu gennemgรฅ, hvad der lige skete, da vi indlรฆste ovenstรฅende URL ind 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 reagerer pรฅ URL 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

CodeTรฆndingsmodel

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

CodeTรฆndingsmodel

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

Opsummer dette indlรฆg med: