PHP MVC Framework Tutorial: CodeIgniter Eksempel

Hva er PHP MVC-rammeverket?

PHP MVC er et applikasjonsdesignmønster som skiller applikasjonsdata og forretningslogikk (modell) fra presentasjonen (visning). MVC står for Model, View & Controller.

Kontrolleren formidler mellom modellene og visningene.

Tenk på MVC-designmønsteret som en bil og sjåfør.

Bilen har frontrutene (visning) som føreren (kontrolleren) bruker for å overvåke trafikken foran, deretter hastighet eller brems (modell) avhengig av hva han ser foran seg.

Hvorfor bruke PHP MVC Framework?

  • PHP MVC Frameworks forenkler arbeidet med komplekse teknologier ved å;
    • Skjuler alle de komplekse implementeringsdetaljene
    • Tilbyr standardmetoder som vi kan bruke for å bygge applikasjonene våre.
    • Økt utviklerproduktivitet, dette er fordi basisimplementeringen av aktiviteter som å koble til databasen, rense brukerinndata osv. allerede er delvis implementert.
    • Overholdelse av profesjonelle kodestandarder

PHP MVC-designmønster

La oss nå kort diskutere hver komponent i MVC-designmønsteret.

Modell – denne delen er opptatt av forretningslogikken og applikasjonsdataene. Den kan brukes til å utføre datavalidering, behandle data og lagre den. Dataene kan komme fra;

  • flat fil
  • database
  • XML-dokument
  • Andre gyldige datakilder.

controller – dette er delen som omhandler brukernes forespørsler om ressurser fra serveren.

Som et eksempel, når brukere ber om URL …/index.php?products=list, vil kontrolleren laste inn produktmodellen for å hente produktdataene og deretter sende ut resultatene i listevisningen.

I et nøtteskall kobler kontrolleren modellene og visningene sammen avhengig av de forespurte ressursene.

Visninger – denne delen omhandler presentasjon av data for brukeren. Dette er vanligvis i form av HTML-sider.

Typer PHP MVC-rammeverk

Å velge det beste PHP-rammeverket er en utfordring.

Du trenger ikke å skrive ditt eget rammeverk for å dra nytte av fordelene med MVC.

Du bør bare prøve å lage din egen MVC-relaterte applikasjonsdesign for å forstå hvordan MVC-rammeverk fungerer.

Når du er komfortabel med måten MVC-rammeverk fungerer på, bør du gå videre til de modne og allerede testede rammeverkene.

Tabellen nedenfor beskriver kort noen av de populære php-rammeverkene og funksjonene som hvert rammeverk tilbyr.

Rammeverk Description

CodeIgniter


CodeIgniter


https://codeigniter.com/

Det er et av de mest populære PHP MVC-rammeverkene. Den er lett og har en kort læringskurve. Den har et rikt sett med biblioteker som hjelper deg med å bygge nettsteder og applikasjoner raskt. Brukere med begrenset kunnskap om OOP-programmering kan også bruke den. CodeIgniter-drevne applikasjoner inkluderer;


kohana


kohana


http://kohanaframework.org

Det er en Hierarchical Model View Controller HMVC sikkert og lett rammeverk. Den har et rikt sett med komponenter for å utvikle applikasjoner raskt. Selskaper som bruker Kohana inkluderer;


CakePHP


CakePHP


www.cakephp.org

Den er modellert etter Ruby on rails. Det er kjent for konsepter som programvaredesignmønstre, konvensjon over konfigurasjon, ActiveRecord etc. CakePHP drevne applikasjoner inkluderer;


Zend

www.framework.zend.com


Zend

Det er et kraftig rammeverk som er;

  • Sikker, pålitelig, rask og skalerbar
  • Støtter Web 2.0 og oppretting av webtjenester.

Den har APIer fra leverandører som Amazon, Google Flickr, Yahoo osv. Den er ideell for utvikling av forretningsapplikasjoner. Zend-drevne applikasjoner inkluderer;

  • Pimcore CMS,
  • DotKernel.

Bedrifter som bruker Zend-rammeverket inkluderer;

  • BBC
  • Cisco
  • WebEx
  • Offers.com

Overfører meningsmålingsapplikasjonen til CodeIgniter

I dette tutorial, opprettet vi en PHP-avstemningsapplikasjon. Her vil vi portere den koden til CodeIgniter

  • Last ned den nyeste versjonen av CodeIgniter fra deres nettside.
  • Pakk ut innholdet i den zippede filen til utviklingskatalogen i webserverkatalogen. Vi vil bruke ciopinionpoll som mappenavn i denne leksjonen.
  • Bla til URL-en http://localhost/ciopinionpoll/

Overfører meningsmålingsapplikasjonen til CodeIgniter

Vi skal nå overføre meningsmålingsapplikasjonen vår til CodeIgniter. Husk at søknaden vår var delt inn i tre hovedkomponenter, nemlig;

  • Frontkontroller – dette er delen som svarer på URL-forespørsler og returnerer den forespurte siden. Denne koden vil gå inn i kontrolleren
  • Modell – dette er koden som svarer på forespurte data og returnerer forespurte data. Denne koden vil gå inn i modellen
  • Visninger – dette er koden som er ansvarlig for formatering og visning av dataene. Denne koden vil gå inn i visningen

    • Bla til ciopinionpoll-mappen
    • Åpne database.php filen som ligger i program-/konfigurasjonskatalogen.
    • Finn følgende kodelinjer

Databasekonfigurasjonsinnstillinger

Databasekonfigurasjonsinnstillinger

  • Sett brukernavnet til root
  • Sett passordet til ditt lokale vertsrotpassord
  • Databasenavn til opinion_poll. Merk at vi skal bruke databasen opprettet i forrige leksjon.
  • Lagre endringene og lukk filen.

Skaper vår modell

Deretter skal vi lage vår modell som vil utvide CI_Model. CI_Model er en del av CodeIgniter-bibliotekene. Modellen vil ligge i applikasjon/modeller opinion_poll_model.php

<?php 
class Opinion_poll_model extends CI_Model 
{ 
    public function __construct() 
    { 
    	$this->load->database(); 
    } 

    public function total_votes() 
    { 
    	$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
        return $query->row()->choices_count; 
    } 

    public function get_results() 
    { 
    	$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow"); 
        $table_rows = ''; 

        for ($i = 1; $i < 5; $i++) 
        {
             $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; 
             $result = $model->

             select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; 
        } 
        public function add_vote($choice) 
        { 
        	$ts = date("Y-m-d H:i:s"); $data = array('choice' => $choice, 'ts' => $ts); $this->db->insert('js_libraries', $data); 
        } 
   } 
?>

HER,

  • "class Opinion_poll_model utvider CI_Model..." er vår modell som utvider CI_Model
  • "...foreldre:: __construct();" kaller CI_Model-konstruktøren
  • "$this->load->database();" laster databasebiblioteket slik at applikasjonen vår kan samhandle med databasen
  • "$this->db->" er CodeIgniters aktive post. Sjekk dette link for mer informasjon om den aktive posten.

Opprette kontrolleren vår La oss nå lage kontrolleren. Vi vil bruke standard CodeIgniter-kontrolleren som ligger i application/controllers/welcome.php. Erstatt kildekodene med følgende kode.

<?php

if (!defined('BASEPATH'))  exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->model('opinion_poll_model');

    }

    public function index() {

        if ($this->input->post('submitbutton') && !$this->input->post('vote')) {

            echo "<script>alert('You did not vote!');</script>";

        }

        if ($this->input->post('vote')) {

            $this->opinion_poll_model->add_vote($this->input->post('vote'));

            $data['total_votes'] = $this->opinion_poll_model->total_votes();

            $data['rows'] = $this->opinion_poll_model->get_results();

            $this->load->view('results', $data);

        } else {

            $this->load->view('opinion_poll_form');

        }

    }

}

/* End of file welcome.php */

/* Location: ./application/controllers/welcome.php */
?>

HER,

  • "if (!defined('BASEPATH')) exit('Ingen direkte skripttilgang tillatt');" sikrer at brukere ikke får direkte tilgang til kontrollerklassen
  • "class Welcome utvider CI_Controller..." vår kontroller utvider CI_Controller-klassen
  • "public function __construct()" kaller CI_Controllers klassekonstruksjonsmetode og laster vår Opinion_poll_model modell
  • "public function index()..." er funksjonen som tilordnes index.php. den bruker CodeIgniters inngangsklasse for å sjekke om en stemme er sendt, legg den til databasen og vis deretter resultatene. Hvis postmatrisen til inputklassen er tom, laster den inn stemmesiden.
  • "$this->input->post('...')" er CodeIgniter-inndataklassen som fanger innholdet i den globale variabelen $_POST.
  • "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kaller modellens add_vote-metode for å legge stemmen inn i databasen.

Skaper våre synspunkter

Husk fra forrige eksempel at vi hadde to HTML-sider, en for å stemme og den andre for resultater. Vi vil bruke den samme HTML-koden med minimale modifikasjoner for å lage våre synspunkter. Opprett følgende filer i program-/visningskatalogen

opinion_poll_form.php 
<html>
<head>
    <title>
        JavaScript Libraries - Opinion Poll
    </title>
</head>

<body>
    <h2>JavaScript Libraries - Opinion Poll</h2>
    <p><b>What is your favorite JavaScript Library?</b></p>
    <form method="POST" action="index.php">
        <p>
            <input type="radio" name="vote" value="1" /> JQuery
            <br />
            <input type="radio" name="vote" value="2" /> MooTools
            <br />
            <input type="radio" name="vote" value="3" /> YUI Library
            <br />
            <input type="radio" name="vote" value="4" /> Glow </p>
        <p>
            <input type="submit" name="submitbutton" value="OK" />
        </p>
    </form>
</body>
</html>

La oss nå lage resultatsiden results.php

<html>
    <head>
        <title>JavaScript Libraries - Opinion Poll Results</title>
    </head>
    <body>

        <h2>JavaScript Libraries - Opinion Poll Results</h2>

        <p><b>What is your favorite JavaScript Library?</b></p>

        <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>

        <p><table><tr><td>

            <?php print($rows); ?>

        </tr></td></table></p>

        <p><a href="#">Return to voting page</a></p>
</body>
</html>

Testing av søknaden vår

Forutsatt at rotkatalogen til applikasjonen din er ciopinion, bla til http://localhost/ciopionpoll/

PHP MVC-rammetesting

Klikk på OK-knappen, du vil se følgende varselmelding

PHP MVC-rammetesting

Stem på din favorittkandidat og klikk deretter på OK. Du vil se følgende resultatside

PHP MVC-rammetesting

konklusjonen

CodeIgniter er et PHP MVC-rammeverk som er lett å lære og bruke, som kan redusere tiden brukt på å utvikle applikasjoner betraktelig.
CodeIgniter er et PHP MVC-rammeverk som er lett å lære og bruke, som kan redusere tiden brukt på å utvikle applikasjoner betraktelig.

Oppsummering

  • Et rammeverk er et sett med biblioteker som gir delvis implementering av vanlige oppgaver.
  • PHP har en rekke modne og testede MVC-rammeverk med åpen kildekode.
  • En god utviklingstilnærming skiller dataene fra presentasjonen og oppfordrer til bruk av enkelt inngangspunkt i en applikasjon.
  • Tradisjonelle PHP-applikasjoner som følger beste praksis for applikasjonsdesign kan overføres til MVC-rammeverk med minimale modifikasjoner.