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 Tekniske beskrivelser

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

Konklusjon

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.

Sammendrag

  • 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.

Oppsummer dette innlegget med: