CodeIgniter MVC (Model View Controller) -kehysesimerkki

โšก ร„lykรคs yhteenveto

CodeIgniter MVC Framework jakaa sovelluksen malliin, nรคkymรครคn ja ohjaimeen. Malli kรคsittelee dataa ja liiketoimintalogiikkaa, ohjain koordinoi pyyntรถjรค ja nรคkymรค esittรครค tuloksen, mikรค tarjoaa lรถyhรคn kytkennรคn, joustavuutta ja korkeamman kehittรคjรคn tuottavuuden.

  • ๐Ÿ—๏ธ Ydinkuvio: MVC jakaa sovelluksen malli-, nรคkymรค- ja ohjainkomponentteihin.
  • ๐Ÿ’พ Malli: Vuorovaikuttaa tietolรคhteen kanssa ja sรคilyttรครค liiketoimintalogiikkaa, usein Active Recordin kautta.
  • ๐ŸŽ›๏ธ ohjain: Kuuntelee pyyntรถjรค, validoi syรถtteen ja koordinoi mallia ja nรคkymรครค.
  • ๐Ÿ–ผ๏ธ Katso: Esittรครค tiedot HTML-, CSS- ja minimaalisella PHP-muodossa, ilman raskasta logiikkaa.
  • ๐Ÿ”— Lรถysรค kytkentรค: Komponentit toimivat itsenรคisesti, joten kรคyttรถliittymรคn ja taustajรคrjestelmรคn tyรถt voivat toimia rinnakkain.
  • โšก Lyhyet tunnisteet: CodeIgniter-nรคkymissรค kรคytetรครคn yleisesti lyhyitรค PHP-kaikutunnisteita siistimpien mallipohjien luomiseksi.
  • ๐Ÿ” Pyyntรถprosessi: Ohjain malliksi katseltavaksi ja sitten HTML takaisin selaimeen.

CodeIgniter MVC -kehys

Mikรค on MVC?

MVC on lyhenne sanoista Model-View-Controller. Se on arkkitehtuurimalli, joka jakaa sovelluksen kolmeen pรครคkomponenttiin:

  1. Malli kรคsittelee liiketoimintalogiikkaa ja tietokantavuorovaikutuksia.
  2. Ohjain koordinoi mallin ja nรคkymรคn vรคlisiรค toimintoja.
  3. Nรคkymรค vastaa datan esittรคmisestรค.

Seuraavassa on joitakin MVC-arkkitehtuurimallin etuja:

  • Lรถyhรค kytkentรค โ€“ komponentit ovat olemassa ja toimivat toisistaan โ€‹โ€‹riippumatta.
  • Joustavuus โ€“ voit helposti tehdรค muutoksia yksittรคisiin komponentteihin.
  • Lisรครคntynyt tuottavuus โ€“ useampi kuin yksi henkilรถ voi tyรถskennellรค projektin parissa samanaikaisesti. Front-end-kehittรคjรคt voivat tyรถskennellรค nรคkymien ja esitysten parissa, kun taas back-end-kehittรคjรคt keskittyvรคt malleihin, ja koska jรคrjestelmรค on lรถyhรคsti kytketty, kaikki toimivat lopulta yhdessรค.

Malli

Malli vastaa vuorovaikutuksesta tietolรคhteiden kanssa. Tรคmรค on yleensรค tietokanta, mutta se voi olla myรถs palvelu, joka tarjoaa pyydetyt tiedot. On myรถs yleistรค kรคytรคntรถรค pitรครค liiketoimintalogiikka malleissa eikรค ohjaimessa. Tรคtรค kรคytรคntรถรค kutsutaan yleensรค "paksuksi malliksi, ohueksi ohjaimeksi".

Malli yleensรค kirjoittaa tietoja tietokantaan ja tarjoaa mekanismin tietojen muokkaamiseen, pรคivittรคmiseen ja poistamiseen. Nykyaikaisissa verkkosovelluksissa mallit kรคyttรคvรคt tiedonsaantisuunnittelumalleja, kuten Active Recordia, helpottaakseen tietokannan kanssa vuorovaikuttamista.

Esimerkiksi CodeIgniter kรคyttรครค mallien apuna sisรครคnrakennettua Active Record -kirjastoa, kun taas muut kehykset, kuten Laravel, kรคyttรคvรคt Eloquent Object Relational Mapper (ORM) -tyรถkalua datan kรคyttรถรถn.

ohjain

Ohjain kuuntelee kรคyttรคjien saapuvia resurssipyyntรถjรค. Se toimii vรคlittรคjรคnรค mallin ja nรคkymรคn vรคlillรค ja toteuttaa toisinaan myรถs joitakin liiketoimintasรครคntรถjรค. Oletetaan, ettรค ohjain vastaanottaa pyynnรถn rekisterรถidรค kรคyttรคjรค tietokantaan.

Rekisterinpitรคjรค voi suorittaa lรคhetettyjen tietojen validoinnin varmistaakseen, ettรค kaikki vaaditut parametrit ovat olemassa. Jos jokin puuttuu, kรคyttรคjรค ohjataan rekisterรถintisivulle ja nรคytetรครคn asianmukainen virheilmoitus. Rekisterinpitรคjรค voi myรถs pyytรครค mallia suorittamaan lisรคvalidointia, kuten tarkistamaan, onko lรคhetetty sรคhkรถpostiosoite jo olemassa. Jos kaikki validointisรครคnnรถt lรคpรคisevรคt, rekisterinpitรคjรค lรคhettรครค tiedot mallille kรคsiteltรคvรคksi ja odottaa vastausta.

Kun malli on kรคsitellyt tiedot ja palauttanut positiivisen vastauksen, ohjain lataa sopivan nรคkymรคn ja vรคlittรครค mallista palautetun tiedon parametrina.

Nรคytรค

Nรคkymรค kรคsittelee loppukรคyttรคjรคlle esitettyรค dataa. Verkkosovelluksissa nรคkymรคt sisรคltรคvรคt usein HTML:n, CSS:n ja valinnaisesti JavaKรคsikirjoitusNรคkymรคt sisรคltรคvรคt minimaalisesti ohjelmointikoodia, yleensรค vain sen verran, ettรค ne voivat kรคydรค lรคpi mallista vastaanotettujen datakokoelmien, tai apufunktion datan puhdistamiseen tai muokkauslinkkien luomiseen. Useimmat nykyaikaiset verkkosovellukset kรคyttรคvรคt mallinnusmoottoreita, joilla on oma pseudokoodin kaltainen syntaksi, jonka suunnittelijat ymmรคrtรคvรคt. Kun tyรถskentelet CodeIgniterissรค on yleistรค kรคyttรครค lyhyitรค PHP-tageja ja -ohjausrakenteita. Nรคyttรครคksesi jotain CodeIgniter, voisit kรคyttรครค seuraavaa koodia:

<?=$title?>

Toisin kuin:

<?php
echo $title;
?>

Ohjausrakenteet kirjoitetaan yleensรค seuraavasti:

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

Kuten yllรค olevasta esimerkistรค nรคet, nรคkymรค kรคyttรครค yhdistelmรครค seuraavista: PHP ja HTML sen sijaan, ettรค suljettaisiin kaikki puhtaaseen PHP-koodiin.

Miten MVC-kehykset toimivat

Seuraava kuva havainnollistaa MVC-kehyksen toimintaa.

Miten MVC-kehys toimii

Ohjain vastaanottaa kรคyttรคjรคltรค pyynnรถn, on tarvittaessa vuorovaikutuksessa tietokantamallin kanssa ja palauttaa sitten tuloksen selaimelle HTML-koodina, jonka selain tulkitsee ihmisen luettavaan muotoon ja nรคyttรครค kรคyttรคjรคlle.

CodeSytyttimen ohjain

Tarkastellaanpa nyt, mitรค tapahtui, kun latasimme URL verkkoselaimeen. Avaa Welcome.php-tiedosto controller, joka sijaitsee kansiossa application/controllers. Sinun pitรคisi nรคhdรค seuraava koodi:

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

Tรคssรค:

  • defined('BASEPATH') TAI exit('Suoraa komentosarjojen kรคyttรถรค ei sallita'); estรครค suoran pรครคsyn ohjaimeen, jos pyyntรถ ei tullut index.php-tiedoston kautta. Tรคmรค on turvallisuussyistรค.
  • luokka Welcome laajentaa CI_Controller-luokkaa {โ€ฆ} mรครคrittelee Welcome-ohjainluokan ja laajentaa pรครคluokkaa CI_Controller.
  • public function index(){โ€ฆ} mรครคrittรครค indeksointimetodin, joka vastaa URL http://localhost:3000.
  • $this->load->view('welcome_message'); lataa welcome_message-nรคkymรคn, joka sijaitsee application/views-hakemistossa.

Pรคivitรคmme nyt indeksimenetelmรครค seuraavasti:

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

Tรคssรค:

  • $this->load->model('customers_model'); lataa asiakkaan mallin.
  • $data['customer'] = $this->customers_model->get_customer(3); kutsuu customers_model-luokan get_customer-metodia ja vรคlittรครค parametrin 3. Tรคssรค esimerkissรค olemme koodaaneet arvon kiinteรคsti, mutta todellisissa sovelluksissa tรคmรค olisi URI:n parametri.
  • $this->load->view('welcome_message',$data); lataa welcome_message-nรคkymรคn ja vรคlittรครค $data-muuttujan.

CodeSytyttimen malli

Luodaan nyt yllรค olevassa koodissa viitattu malli. Yksinkertaisuuden vuoksi mallimme ei ole vuorovaikutuksessa tietokanta mutta palauttaa staattisen asiakastietueen. Tyรถskentelemme tietokantojen kanssa seuraavissa tutoriaaleissa. Luo tiedosto Customers_model.php hakemistoon application/models ja lisรครค siihen seuraava koodi:

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

Tรคssรค:

  • luokka Asiakkaat_malli laajentaa CI_malli {โ€ฆ} mรครคrittรครค mallin Customers_model, joka laajentaa CI_mallia.
  • public function get_customer($id) {โ€ฆ} mรครคrittรครค get_customer-metodin asiakastunnuksen perusteella.
  • $data[โ€ฆ] mรครคrittรครค kuvitteellisen asiakkaamme staattiset arvot. Tรคmรคn tulisi olla tietokannasta palautettu rivi.
  • palauttaa $data; palauttaa asiakastiedot.

Siinรค kaikki mallimme osalta. Muokataan nyt welcome_message-nรคkymรครค. Avaa welcome_message.php, joka sijaitsee kohdassa:

application/views/welcome_message.php

Korvaa koodi seuraavalla:

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

Tallenna muutokset ja lataa seuraavat URL verkkoselaimessa: http://localhost:3000/Sinun pitรคisi nรคhdรค asiakaskortti alla olevan kuvan mukaisesti.

Asiakastietokortin renderรถijรค Codesytytin

UKK

Se tarkoittaa, ettรค liiketoimintalogiikka elรครค mallissa, pidรคping Ohjain on ohut ja keskittyy reitityspyyntรถihin. Tรคmรค tekee logiikasta uudelleenkรคytettรคvรคn ja ohjaimesta helpommin luettavan ja testattavan.

Nรคkymรคn tulisi esittรครค vain dataa. Pidรคping Sen logiikka erottelee osa-alueet, joten suunnittelijat voivat muokata asettelua koskematta liiketoimintasรครคntรถihin ja samat tiedot voidaan nรคyttรครค eri nรคkymissรค.

Active Record on sisรครคnrakennettu kyselyiden luontityรถkalu, jonka avulla mallit voivat lukea ja kirjoittaa tietokantaan metodikutsuilla raaka-SQL:n sijaan. Se auttaa myรถs estรคmรครคn esca-kรคskyn aiheuttaman SQL-injektion.ping arvot.

Tekoรคly voi luoda vastaavat ohjain-, malli- ja nรคkymรคtiedostot ominaisuuden kuvauksesta ja pitรครค nimeรคmisen yhdenmukaisena. RevTarkastele luotuja kyselyitรค ja tarkista ne ennen niiden suorittamista.

Lyhyt kaikutunniste on kompakti tapa tulostaa arvo nรคkymรคssรค. Koko php-tunnistelohkoa kรคytetรครคn lausekkeissa ja ohjausrakenteissa. Molemmat ovat samanarvoisia tulosteen kannalta, mutta lyhyet tunnisteet pitรคvรคt nรคkymรคt siisteinรค.

Tiivistรค tรคmรค viesti seuraavasti: