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.

Mikรค on MVC?
MVC on lyhenne sanoista Model-View-Controller. Se on arkkitehtuurimalli, joka jakaa sovelluksen kolmeen pรครคkomponenttiin:
- Malli kรคsittelee liiketoimintalogiikkaa ja tietokantavuorovaikutuksia.
- Ohjain koordinoi mallin ja nรคkymรคn vรคlisiรค toimintoja.
- 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.
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.


