CodeIgniter MVC (Model View Controller) Framework med exempel

Vad är MVC?

MVC-standarder för Model-View-Control. Det är ett arkitektoniskt mönster som delar upp applikationen i tre huvudkomponenter.

1. Modell handlar om affärslogik och databasinteraktioner

2. Controller koordinerar aktiviteterna mellan modellen och vyn

3. View ansvarar för datapresentation

Följande är några av fördelarna med MVC-arkitektoniska mönster

  • Lös koppling - komponenterna finns och fungerar oberoende av varandra.
  • Flexibilitet – man kan enkelt göra ändringar i enskilda komponenter
  • Ökad produktivitet – mer än en person kan arbeta med projektet samtidigt. Front-end-utvecklarna kan arbeta med vyer och presentation medan backend-utvecklare kan fokusera på modeller och eftersom systemet är löst kopplat fungerar det i slutet av dagen

Modell

Modellen ansvarar för att interagera med datakällor. Detta är vanligtvis en databas, men det kan också vara en tjänst som tillhandahåller den efterfrågade informationen. Det är också vanligt att ha affärslogiken i modellerna i motsats till styrenheten. Denna praxis brukar kallas fett modell skinny controller.

Modellen skriver vanligtvis in data i databasen, tillhandahåller en mekanism för redigering och uppdatering och radering av data. I en modern webbapplikation använder modellerna designmönster för dataåtkomst som aktiv registrering för att göra interaktionen med databasen enklare.

Till exempel använder CodeIgniter ett inbyggt bibliotek Active Record för att hjälpa modellerna medan andra ramverk som Laravel använder Eloquent Object Relational Mapper (ORM) som underlättar dataåtkomst.

Regulator

Styrenheten lyssnar efter inkommande förfrågningar om resurser från användarna. Den fungerar som mellanhand mellan modellen och vyn och implementerar ibland även vissa affärsregler. Låt oss säga att kontrollanten får en begäran om att registrera en användare i databasen.

Den registeransvarige kan utföra datavalidering av det som har lämnats för att säkerställa att alla nödvändiga parametrar har skickats. Om något saknas omdirigeras användaren till registreringssidan med lämpligt felmeddelande. Kontrollanten kan också begära att modellen utför mer validering genom att kontrollera om den inlämnade e-postadressen redan finns. Om alla valideringsregler passerar skickar den registeransvarige data till modellen för process och väntar på svaret.

När modellen har bearbetat informationen och returnerat ett positivt svar, laddar styrenheten den lämpliga vyn och skickar in data som returneras från modellen som en parameter.

Visa

Vyn behandlar data som presenteras för slutanvändaren. I webbapplikationer innehåller vyer ofta HTML, CSS och eventuellt JavaScript. Vyer innehåller minsta programmeringskod. Koden som finns i vyer används vanligtvis för att gå igenom samlingar av data som tas emot som parametrar från modellen eller hjälpfunktionen för att rensa upp data eller skapa länkar för att redigera posterna. De flesta moderna webbapplikationer använder vanligtvis mallmotorer som definierar sin egen syntax som är mer som pseudokod och lätt kan förstås av designers. När du arbetar med CodeIgniter är det vanligt att använda korta PHP-taggar och kontrollstrukturer. För att visa något i CodeIgniter kan man använda följande kod

<?=$title?>

I motsats till

<?php
echo $title;
?>

Kontrollstrukturer skrivs vanligtvis enligt följande

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

Som du kan se från exemplet ovan kommer vyn att använda en kombination av PHP och HTML istället för att innesluta allt i ren PHP-kod.

Hur fungerar MVC-ramverk?

Följande bild visar hur MVC-ramverket fungerar

MVC Frameworks fungerar

En kontrollant tar emot begäran från användaren, interagerar med databasmodellen vid behov och returnerar sedan resultatet tillbaka till webbläsaren i form av HTML-kod som webbläsaren tolkade till ett läsbart format och visas för användaren.

CodeIgniter Controller

Låt oss nu analysera vad som just hände när vi laddade in ovanstående URL i webbläsaren.

Öppna filen Welcome.php controller lokaliserad applikation/kontroller

Du bör kunna se följande kod

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

HÄR,

  • defined('BASEPATH') OR exit('Ingen direkt skriptåtkomst tillåten'); förhindrar direkt åtkomst till kontrollern om begäran inte kom via index.php. detta är av säkerhetsskäl.
  • klassen Welcome utökar CI_Controller {...} definierar klassen Welcome controller och utökar den överordnade klassen CI_Controller
  • public function index(){...} definierar indexmetoden som svarar på URL:en http://localhost:3000
    • $this->load->view('welcome_message'); laddar vyn welcome_message som finns i application/views-katalogen

Vi kommer nu att uppdatera indexmetoden enligt följande

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

HÄR,

  • $this->load->model('customers_model'); laddar kundens modell.
  • $data['customer'] = $this->customers_model->get_customer(3); anropar get_customer-metoden för customers_model och skickar in parametern 3. I det här exemplet har vi hårdkodat värdet men i verkliga applikationer skulle detta vara en parameter från URI:n.
  • $this->load->view('welcome_message',$data); laddar vyn welcome_message och skickar in variabeln $data till vyn

CodeIgniter modell

Låt oss nu skapa vyn som vi refererade till i ovanstående kod. För enkelhetens skull kommer vår modell inte att interagera med databas men kommer att returnera en statisk kundpost. Vi kommer att arbeta med databaser i nästa handledning.

Skapa en fil Customers_model.php i application/models

Lägg till följande kod

<?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;
}
}

HÄR,

  • class Customers_model extends CI_Model {...} definierar modellen Customers_model som utökar CI_Model.
  • public function get_customer($id) {...} definierar get customer-metoden baserat på ett kund-id
  • $data[...] definierar de statiska värdena för vår fiktiva kund. Detta bör vara en rad som returneras från databasen.
  • returnera $data; returnerar kunddata.

Det vill säga det för vår modell. Låt oss nu ändra välkomstmeddelandevyn

Öppna welcome_message.php som finns i

application/views/welcome_message.php

Byt ut koden mot följande

<!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>

Spara ändringarna

Ladda följande URL i webbläsaren

http://localhost:3000/

Du ska kunna se kundkortet som visas på bilden nedan

CodeIgniter modell

Sammanfattning

  • MVC är ett arkitektoniskt mönster som delar upp applikationen i tre huvudkomponenter
  • Modellen ansvarar för att interagera med datakällor
  • Styrenheten lyssnar efter inkommande förfrågningar om resurser från användarna
  • I webbapplikationer innehåller vyer ofta HTML, CSS och eventuellt JavaScript
  • En kontrollant tar emot begäran från användaren, interagerar med databasmodellen vid behov och returnerar sedan resultatet tillbaka till webbläsaren i form av HTML-kod