CodeIgniter MVC (Model View Controller) -kehys esimerkin kanssa
Mikä on MVC?
MVC-standardit Model-View-Controlille. Se on arkkitehtoninen kuvio, joka jakaa sovelluksen kolmeen pääkomponenttiin.
1. Malli käsittelee liiketoimintalogiikkaa ja tietokantavuorovaikutuksia
2. Controller koordinoi toimintaa mallin ja näkymän välillä
3. View vastaa tietojen esittämisestä
Seuraavassa on joitain MVC-arkkitehtonisen kuvion etuja
- Löysä kytkentä - komponentit ovat olemassa ja toimivat toisistaan riippumatta.
- Joustavuus – yksittäisiin komponentteihin on helppo tehdä muutoksia
- Lisääntynyt tuottavuus – useampi kuin yksi henkilö voi työskennellä projektin parissa samanaikaisesti. Etupään kehittäjät voivat työstää näkymiä ja esityksiä, kun taas taustakehittäjät voivat keskittyä malleihin, ja koska järjestelmä on löyhästi kytketty, se toimii päivän päätteeksi.
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 yleinen käytäntö, että malleihin sisältyy liiketoimintalogiikka toisin kuin rekisterinpitäjä. Tätä käytäntöä kutsutaan yleensä nimellä fat model skinny controller.
Malli yleensä kirjoittaa tietoja tietokantaan, tarjoaa mekanismin tietojen muokkaamiseen, päivittämiseen ja poistamiseen. Nykyaikaisessa verkkosovelluksessa mallit käyttävät datan käytön suunnittelumalleja, kuten aktiivista tietuetta, helpottaakseen vuorovaikutusta tietokannan kanssa.
Esimerkiksi CodeIgniter käyttää sisäänrakennettua Active Record -kirjastoa auttamaan malleja, kun taas muut puitteet, kuten Laravel, käyttävät Eloquent Object Relational Mapperia (ORM), joka auttaa tietojen käyttöä.
ohjain
Ohjain kuuntelee tulevia resurssipyyntöjä käyttäjiltä. Se toimii välikappaleena mallin ja näkymän välillä ja toteuttaa toisinaan myös joitain liiketoiminnan sääntöjä. Oletetaan, että ohjain vastaanottaa pyynnön rekisteröidä käyttäjä tietokantaan.
Rekisterinpitäjä voi suorittaa toimitettujen tietojen validoinnin varmistaakseen, että kaikki vaaditut parametrit on toimitettu. Jos jotain puuttuu, käyttäjä ohjataan rekisteröintisivulle ja näytetään asianmukainen virheilmoitus. Rekisterinpitäjä voi myös pyytää mallia suorittamaan lisää vahvistusta tarkistamalla, onko lähetetty sähköpostiosoite jo olemassa. Jos kaikki validointisäännöt läpäisevät, rekisterinpitäjä lähettää tiedot mallille prosessia varten 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äsikirjoitus. Näkymät sisältävät vähimmäisohjelmointikoodin. Näkymien sisältämää koodia käytetään yleensä mallin tai aputoiminnon parametreina saatujen tietokokoelmien silmukassa tietojen puhdistamista tai linkkien luomista tietueiden muokkaamista varten. Useimmat nykyaikaiset verkkosovellukset käyttävät yleensä mallinkoneita, jotka määrittävät oman syntaksinsa, joka on enemmän kuin pseudokoodi ja jonka suunnittelijat voivat helposti ymmärtää. CodeIgniterin kanssa työskennellessä on yleinen käytäntö käyttää lyhyitä PHP-tageja ja ohjausrakenteita. Voit näyttää jotain CodeIgniterissä käyttämällä 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ää PHP ja HTML sen sijaan, että suljettaisiin kaikki puhtaaseen PHP-koodiin.
Kuinka MVC-kehykset toimivat?
Seuraava kuva näyttää MVC-kehyksen toiminnan
Ohjain vastaanottaa pyynnön käyttäjältä, on tarvittaessa vuorovaikutuksessa tietokantamallin kanssa ja palauttaa sitten tuloksen takaisin selaimeen HTML-koodin muodossa, jonka selain tulkitsi ihmisen luettavaan muotoon ja näyttää käyttäjälle.
CodeIgniter ohjain
Selvitetään nyt, mitä juuri tapahtui, kun latasimme yllä olevan URL-osoitteen verkkoselaimeen.
Avaa tiedosto Welcome.php controller, jossa on sovellus/ohjaimet
Sinun pitäisi pystyä näkemään 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('Ei suoraa komentosarjan käyttöä sallittu'); estää suoran pääsyn ohjaimeen, jos pyyntö ei tullut index.php:n kautta. tämä on turvallisuussyistä.
- luokka Tervetuloa laajentaa CI_Controller {…} määrittää Tervetuloa-ohjainluokan ja laajentaa pääluokan CI_Controller
- public function index(){…} määrittää indeksimenetelmän, joka vastaa URL-osoitteeseen
http://localhost:3000
- $this->load->view('welcome_message'); lataa näkymän tervetuloviesti, joka sijaitsee Application/Views-hakemistossa
Päivitämme nyt indeksimenetelmän 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.
- $tiedot['asiakas'] = $this->customers_model->get_customer(3); kutsuu asiakkaat_mallin get_customer-metodia ja välittää parametrin 3. Tässä esimerkissä olemme koodannut arvon, mutta tosielämän sovelluksissa tämä olisi URI:n parametri.
- $this->load->view('welcome_message',$data); lataa welcome_message-näkymän ja välittää $data-muuttujan näkymään
CodeIgniter malli
Luodaan nyt näkymä, johon viitattiin yllä olevassa koodissa. Yksinkertaisuuden vuoksi mallimme ei ole vuorovaikutuksessa tietokanta mutta palauttaa staattisen asiakastietueen. Työskentelemme tietokantojen kanssa seuraavissa opetusohjelmissa.
Luo tiedosto Customers_model.php kohdassa Application/models
Lisää 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.
- julkinen funktio get_customer($id) {…} määrittää asiakastunnukseen perustuvan get customer -menetelmän
- $data[…] määrittelee kuvitteellisen asiakkaamme staattiset arvot. Tämän pitäisi olla tietokannasta palautettu rivi.
- palauttaa $data; palauttaa asiakastiedot.
Eli meidän mallillemme. Muokataan nyt tervetuloviesti-näkymää
Avaa welcome_message.php, joka sijaitsee osoitteessa
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
Lataa seuraava URL-osoite verkkoselaimeen
http://localhost:3000/
Sinun pitäisi pystyä näkemään asiakaskortti alla olevan kuvan mukaisesti
Yhteenveto
- MVC on arkkitehtoninen kuvio, joka jakaa sovelluksen kolmeen pääkomponenttiin
- Malli vastaa vuorovaikutuksesta tietolähteiden kanssa
- Ohjain kuuntelee tulevia resurssipyyntöjä käyttäjiltä
- Verkkosovelluksissa näkymät sisältävät usein HTML:n, CSS:n ja valinnaisesti JavaKäsikirjoitus
- Ohjain vastaanottaa pyynnön käyttäjältä, on tarvittaessa vuorovaikutuksessa tietokantamallin kanssa ja palauttaa sitten tuloksen takaisin selaimeen HTML-koodin muodossa