PHP MVC Framework Tutorial: CodeIgniter Eksempel

Hvad er PHP MVC framework?

PHP MVC er et applikationsdesignmรธnster, der adskiller applikationsdata og forretningslogik (model) fra prรฆsentationen (visning). MVC stรฅr for Model, View & Controller.

Controlleren formidler mellem modellerne og visningerne.

Tรฆnk pรฅ MVC-designmรธnsteret som en bil og chauffรธr.

Bilen har de forruder (udsigt), som fรธreren (controlleren) bruger til at overvรฅge trafikken foran, derefter hastighed eller bremse (model) afhรฆngigt af, hvad han ser forude.

Hvorfor bruge PHP MVC Framework?

  • PHP MVC Frameworks forenkler arbejdet med komplekse teknologier ved at;
    • Skjul alle de komplekse implementeringsdetaljer
    • Leverer standardmetoder, som vi kan bruge til at bygge vores applikationer.
    • ร˜get udviklerproduktivitet, dette skyldes, at basisimplementeringen af โ€‹โ€‹aktiviteter sรฅsom at oprette forbindelse til databasen, rense brugerinput osv. allerede er delvist implementeret.
    • Overholdelse af professionelle kodningsstandarder

PHP MVC-designmรธnster

Lad os nu kort diskutere hver komponent i MVC-designmรธnsteret.

Model โ€“ denne del handler om forretningslogikken og applikationsdataene. Den kan bruges til at udfรธre datavalideringer, behandle data og gemme dem. Dataene kan komme fra;

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

controller โ€“ dette er den del, der omhandler brugernes anmodninger om ressourcer fra serveren.

Som et eksempel, nรฅr brugerne anmoder om URL'en โ€ฆ/index.php?products=list, vil controlleren indlรฆse produktmodellen for at hente produktdataene og derefter udlรฆse resultaterne i listevisningen.

I en nรธddeskal forbinder controlleren modellerne og visningerne sammen afhรฆngigt af de รธnskede ressourcer.

Views โ€“ denne del omhandler prรฆsentation af data for brugeren. Dette er normalt i form af HTML-sider.

Typer af PHP MVC-ramme

At vรฆlge den bedste PHP-ramme er en udfordring.

Du behรธver ikke at skrive din egen ramme for at fรฅ glรฆde af fordelene ved MVC.

Du bรธr kun forsรธge at skabe dit eget MVC-relaterede applikationsdesign for at forstรฅ, hvordan MVC-frameworks fungerer.

Nรฅr du er fortrolig med den mรฅde, MVC-frameworks fungerer pรฅ, bรธr du gรฅ videre til de modne og allerede testede rammer.

Tabellen nedenfor beskriver kort nogle af de populรฆre php-frameworks og de funktioner, som hvert framework tilbyder.

Framework Beskrivelse

CodeIgniter


CodeIgniter


https://codeigniter.com/

Det er en af โ€‹โ€‹de mest populรฆre PHP MVC-frameworks. Den er let og har en kort indlรฆringskurve. Det har et rigt sรฆt af biblioteker, der hjรฆlper med at bygge websteder og applikationer hurtigt. Brugere med begrรฆnset kendskab til OOP-programmering kan ogsรฅ bruge det. CodeIgniter-drevne applikationer inkluderer;


kohana


kohana


http://kohanaframework.org

Det er en Hierarchical Model View Controller HMVC sikker og let ramme. Den har et rigt sรฆt komponenter til hurtig udvikling af applikationer. Virksomheder der bruger Kohana inkluderer;


CakePHP


CakePHP


www.cakephp.org

Den er modelleret efter Ruby on rails. Det er kendt for koncepter som softwaredesignmรธnstre, konvention over konfiguration, ActiveRecord osv. CakePHP drevne applikationer omfatter;


Zend

www.framework.zend.com


Zend

Det er en kraftfuld ramme, der er;

  • Sikker, pรฅlidelig, hurtig og skalerbar
  • Understรธtter Web 2.0 og oprettelse af webtjenester.

Den har API'er fra leverandรธrer som AmazonGoogle, Flickr, Yahoo osv. Det er ideelt til udvikling af forretningsapplikationer. Zend-drevne applikationer inkluderer;

  • Pimcore CMS,
  • DotKernel.

Virksomheder, der bruger Zend-rammen inkluderer;

  • BBC
  • Cisco
  • Webex
  • Offers.com

Overfรธrsel af meningsmรฅlingsapplikationen til CodeIgniter

I denne tutorial, har vi oprettet en PHP-afstemningsapplikation. Her vil vi portere den kode til CodeIgniter

  • Hent den seneste version af CodeIgniter fra deres internet side.
  • Udpak indholdet af den zippede fil til din udviklingsmappe i dit webserverbibliotek. Vi vil bruge ciopinionpoll som mappenavn i denne lektion.
  • Gรฅ til URL'en http://localhost/ciopinionpoll/

Overfรธrsel af meningsmรฅlingsapplikationen til CodeIgniter

Vi vil nu overfรธre vores meningsmรฅlingsapplikation til CodeIgniter. Husk pรฅ, at vores ansรธgning var opdelt i tre hovedkomponenter, nemlig;

  • Frontcontroller โ€“ dette er den del, der reagerer pรฅ URL-anmodninger og returnerer den anmodede side. Denne kode vil gรฅ ind i controlleren
  • Model โ€“ dette er koden, der reagerer pรฅ anmodede data og returnerer de anmodede data. Denne kode vil gรฅ ind i modellen
  • Visninger โ€“ dette er koden, der er ansvarlig for formatering og visning af dataene. Denne kode vil gรฅ ind i visningen

    • Gennemse mappen ciopinionpoll
    • ร…bne database.php fil, der er placeret i program-/konfigurationsmappen.
    • Find fรธlgende kodelinjer

Indstillinger for databasekonfiguration

Indstillinger for databasekonfiguration

  • Indstil brugernavnet til root
  • Indstil adgangskoden til din localhost root-adgangskode
  • Databasenavn til opinion_poll. Bemรฆrk, at vi vil bruge databasen oprettet i forrige lektion.
  • Gem รฆndringerne og luk filen.

At skabe vores model

Dernรฆst skal vi skabe vores model, der vil udvide CI_Model. CI_Model er en del af CodeIgniter-bibliotekerne. Modellen vil vรฆre placeret i applikation/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 udvider CI_Model..." er vores model, der udvider CI_Model
  • "...forรฆlder:: __construct();" kalder CI_Model-konstruktรธren
  • "$this->load->database();" indlรฆser databasebiblioteket, sรฅ vores applikation kan interagere med databasen
  • "$this->db->" er CodeIgniters aktive registrering. Tjek det her link for mere information om den aktive post.

Oprettelse af vores controller Lad os nu oprette controlleren. Vi vil bruge standard CodeIgniter-controlleren placeret i application/controllers/welcome.php. Erstat dens kildekoder 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 scriptadgang tilladt');" sikrer, at brugerne ikke fรฅr direkte adgang til controllerklassen
  • "class Welcome udvider CI_Controller..." vores controller udvider CI_Controller-klassen
  • "public function __construct()" kalder CI_Controllers klassekonstruktormetode og indlรฆser vores Opinion_poll_model model
  • "public function index()..." er den funktion, der er knyttet til index.php. den bruger CodeIgniters inputklasse til at kontrollere, om en stemme er blevet afgivet, fรธj den til databasen og fรฅ vist resultaterne. Hvis post-arrayet for inputklassen er tomt, indlรฆser det afstemningssiden.
  • "$this->input->post('...')" er CodeIgniter-inputklassen, der fanger indholdet af den globale variabel $_POST.
  • "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kalder modellens add_vote metode til at tilfรธje stemmen til databasen.

Oprettelse af vores synspunkter

Husk fra det forrige eksempel, at vi havde to HTML-sider, en til afstemning og den anden til resultater. Vi vil bruge den samme HTML-kode med minimale รฆndringer for at skabe vores synspunkter. Opret fรธlgende filer i program-/visningsmappen

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>

Lad os nu oprette 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>

Tester vores applikation

Hvis du antager, at din applikations rodbibliotek er ciopinion, skal du gรฅ til http://localhost/ciopionpoll/

PHP MVC framework test

Klik pรฅ knappen OK, du vil se fรธlgende advarselsmeddelelse

PHP MVC framework test

Stem pรฅ din favoritkandidat og klik derefter pรฅ OK. Du vil se fรธlgende resultatside

PHP MVC framework test

Konklusion

CodeIgniter er en nem at lรฆre og bruge PHP MVC-ramme, der i hรธj grad kan reducere den tid, der bruges pรฅ at udvikle applikationer.
CodeIgniter er en nem at lรฆre og bruge PHP MVC-ramme, der i hรธj grad kan reducere den tid, der bruges pรฅ at udvikle applikationer.

Resumรฉ

  • En ramme er et sรฆt af biblioteker, der leverer delvis implementering af fรฆlles opgaver.
  • PHP har en rรฆkke open source-modne og testede MVC-rammer.
  • En god udviklingstilgang adskiller data fra prรฆsentationen og opfordrer til brugen af โ€‹โ€‹et enkelt indgangspunkt i en applikation.
  • Traditionelle PHP-applikationer, der fรธlger bedste praksis for applikationsdesign, kan overfรธres til MVC-frameworks med minimale รฆndringer.

Opsummer dette indlรฆg med: