PHP MVC Framework Tutorial: CodeIgniter esimerkki

Mikä on PHP MVC -kehys?

PHP MVC on sovelluksen suunnittelumalli, joka erottaa sovelluksen tiedot ja liiketoimintalogiikan (mallin) esityksestä (näkymästä). MVC tulee sanoista Model, View & Controller.

Ohjain välittää mallien ja näkymien välillä.

Ajattele MVC-suunnittelumallia autona ja kuljettajana.

Autossa on tuulilasit (näkymä), joita kuljettaja (ohjain) käyttää valvomaan edessä olevaa liikennettä ja sitten nopeutta tai jarrutusta (malli) riippuen siitä, mitä hän näkee eteenpäin.

Miksi käyttää PHP MVC Frameworkia?

  • PHP MVC Frameworks yksinkertaistaa monimutkaisten teknologioiden kanssa työskentelyä;
    • Piilottaa kaikki monimutkaiset toteutustiedot
    • Tarjoaa vakiomenetelmiä, joita voimme käyttää sovelluksiemme rakentamiseen.
    • Lisääntynyt kehittäjien tuottavuus, tämä johtuu siitä, että toimintojen perustoteutus, kuten tietokantaan yhdistäminen, käyttäjän syötteiden puhdistaminen jne., on jo osittain toteutettu.
    • Ammattimaisten koodausstandardien noudattaminen

PHP MVC -suunnittelukuvio

Keskustellaan nyt lyhyesti jokaisesta MVC-suunnittelumallin komponentista.

Malli – Tämä osa koskee liiketoimintalogiikkaa ja sovellustietoja. Sitä voidaan käyttää tietojen validointiin, tietojen käsittelyyn ja tallentamiseen. Tiedot voivat olla peräisin;

  • litteä tiedosto
  • tietokanta
  • XML-dokumentti
  • Muut kelvolliset tietolähteet.

ohjain – Tämä osa käsittelee käyttäjien resurssipyyntöjä palvelimelta.

Esimerkkinä, kun käyttäjät pyytävät URL-osoitetta …/index.php?products=list, ohjain lataa tuotemallin noutaakseen tuotetiedot ja tulostaa sitten tulokset luettelonäkymään.

Pähkinänkuoressa ohjain linkittää mallit ja näkymät yhteen pyydettyjen resurssien mukaan.

Näyttökerrat – Tämä osa käsittelee tietojen esittämistä käyttäjälle. Tämä on yleensä HTML-sivujen muodossa.

PHP MVC -kehyksen tyypit

Parhaan PHP-kehyksen valitseminen on haaste.

Sinun ei tarvitse kirjoittaa omaa kehystä hyötyäksesi MVC:n eduista.

Sinun tulisi vain yrittää luoda oma MVC:hen liittyvä sovellussuunnittelu ymmärtääksesi, miten MVC-kehykset toimivat.

Kun olet tyytyväinen MVC-kehysten toimintaan, sinun tulee siirtyä kypsiin ja jo testattuihin kehyksiin.

Alla olevassa taulukossa kuvataan lyhyesti joitain suosittuja php-kehyksiä ja kunkin kehyksen tarjoamia ominaisuuksia.

Puitteet Tuotetiedot

CodeIgniter


CodeIgniter


https://codeigniter.com/

Se on yksi suosituimmista PHP MVC -kehyksistä. Se on kevyt ja siinä on lyhyt oppimiskäyrä. Siinä on runsaasti kirjastoja, jotka auttavat rakentamaan verkkosivustoja ja sovelluksia nopeasti. Käyttäjät, joilla on vähän tietoa OOP-ohjelmoinnista, voivat myös käyttää sitä. CodeIgniter-käyttöiset sovellukset sisältävät;


kohana


kohana


http://kohanaframework.org

Se on hierarkkinen mallinäkymäohjain HMVC, turvallinen ja kevyt kehys. Siinä on runsaasti komponentteja sovellusten nopeaan kehittämiseen. Kohanaa käyttäviä yrityksiä ovat mm.


cakePHP


cakePHP


www.cakephp.org

Se on mallinnettu Ruby on rails -mallin mukaan. Se tunnetaan sellaisista käsitteistä kuin ohjelmistojen suunnittelumalleista, kokoonpanon ylittämisestä, ActiveRecord jne. cakePHP powered sovelluksia ovat;


Zend

www.framework.zend.com


Zend

Se on voimakas kehys;

  • Turvallinen, luotettava, nopea ja skaalautuva
  • Tukee Web 2.0:aa ja verkkopalvelujen luomista.

Se sisältää API:ita toimittajilta, kuten Amazon, Google, Flickr, Yahoo jne. Se on ihanteellinen yrityssovellusten kehittämiseen. Zend-käyttöiset sovellukset sisältävät;

  • Pimcore CMS,
  • DotKernel.

Zend-kehystä käyttäviä yrityksiä ovat mm.

  • BBC
  • Cisco
  • WebEx
  • Offers.com

Mielipidekyselysovelluksen siirtäminen CodeIgniteriin

Tässä oppitunti, loimme PHP-kyselysovelluksen. Täällä siirrämme koodin CodeIgniteriin

  • Lataa CodeIgniterin uusin versio heidän tuotteistaan -sivustolta.
  • Pura pakatun tiedoston sisältö verkkopalvelimesi hakemistoon kehityshakemistoosi. Käytämme tämän oppitunnin kansion nimenä ciopinionpoll.
  • Selaa URL-osoitteeseen http://localhost/ciopinionpoll/

Mielipidekyselysovelluksen siirtäminen CodeIgniteriin

Aiomme nyt siirtää mielipidekyselysovelluksemme CodeIgniteriin. Muista, että sovelluksemme oli jaettu kolmeen pääkomponenttiin, nimittäin;

  • Etuohjain – tämä on osa, joka vastaa URL-pyyntöihin ja palauttaa pyydetyn sivun. Tämä koodi menee ohjaimeen
  • Malli – tämä on koodi, joka vastaa pyydettyihin tietoihin ja palauttaa pyydetyt tiedot. Tämä koodi menee malliin
  • Näkymät – tämä koodi vastaa tietojen muotoilusta ja näyttämisestä. Tämä koodi siirtyy näkymään

    • Selaa ciopinionpoll-kansioon
    • Avaa tietokanta.php tiedosto, joka sijaitsee Application/config-hakemistossa.
    • Etsi seuraavat koodirivit

Tietokannan kokoonpanoasetukset

Tietokannan kokoonpanoasetukset

  • Aseta käyttäjänimi rootiksi
  • Aseta salasana localhost-pääkäyttäjän salasanaksi
  • Tietokannan nimi mielipidekyselyyn. Huomaa, että käytämme edellisellä oppitunnilla luotua tietokantaa.
  • Tallenna muutokset ja sulje tiedosto.

Mallimme luominen

Seuraavaksi aiomme luoda mallimme, joka laajentaa CI_Model-mallia. CI_Model on osa CodeIgniter-kirjastoja. Malli sijoitetaan sovellukseen/malleihin mielipidekysely_malli.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); 
        } 
   } 
?>

TÄSSÄ,

  • “class Opinion_poll_model laajentaa CI_Model…” on mallimme, joka laajentaa CI_Model-mallia
  • "...parent:: __construct();" kutsuu CI_Model-konstruktoria
  • "$this->load->tietokanta();" lataa tietokantakirjaston, jotta sovelluksemme voi olla vuorovaikutuksessa tietokannan kanssa
  • "$this->db->" on CodeIgniterin aktiivinen tietue. Tarkista tämä linkkiä lisätietoja aktiivisesta tietueesta.

Ohjaimemme luominen Luodaan nyt ohjain. Käytämme CodeIgniter-oletusohjainta, joka sijaitsee osoitteessa application/controllers/welcome.php. Korvaa sen lähdekoodit seuraavalla koodilla.

<?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 */
?>

TÄSSÄ,

  • "if (!defined('BASEPATH')) exit('Ei suoraa komentosarjan käyttöä sallittu');" varmistaa, että käyttäjät eivät pääse suoraan ohjainluokkaan
  • “class Welcome laajentaa CI_Controlleria…” ohjaimemme laajentaa CI_Controller-luokkaa
  • "public function __construct()" kutsuu CI_Controllerin luokan rakentajamenetelmää ja lataa Opinion_poll_model-mallimme
  • “public function index()…” on funktio, joka liittyy indeksiin.php. se käyttää CodeIgniterin syöttöluokkaa tarkistaakseen, onko äänestys lähetetty, lisää se tietokantaan ja näyttää tulokset. Jos syöttöluokan viestitaulukko on tyhjä, se lataa äänestyssivun.
  • “$this->input->post('…')” on CodeIgniterin syöttöluokka, joka nappaa globaalin muuttujan $_POST sisällön.
  • "$this->opinion_poll_model->add_vote($this->input->post('vote'))" kutsuu mallin add_vote-menetelmää äänen lisäämiseksi tietokantaan.

Luomme näkemyksiämme

Muista edellisestä esimerkistä, että meillä oli kaksi HTML-sivua, yksi äänestämistä ja toinen tuloksia varten. Käytämme samaa HTML-koodia pienin muutoksin näkemyksiemme luomiseen. Luo seuraavat tiedostot sovellus-/näkymähakemistoon

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>

Luodaan nyt tulossivu tulokset.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>

Testaamme sovellustamme

Jos sovelluksesi juurihakemisto on ciopinion, siirry kohtaan http://localhost/ciopionpoll/

PHP MVC -kehyksen testaus

Napsauta OK-painiketta, näet seuraavan varoitusviestin

PHP MVC -kehyksen testaus

Äänestä suosikkiehdokastasi ja napsauta sitten OK. Näet seuraavan tulossivun

PHP MVC -kehyksen testaus

Yhteenveto

CodeIgniter on helppo oppia ja käyttää PHP MVC -kehystä, joka voi vähentää huomattavasti sovellusten kehittämiseen käytettyä aikaa.
CodeIgniter on helppo oppia ja käyttää PHP MVC -kehystä, joka voi vähentää huomattavasti sovellusten kehittämiseen käytettyä aikaa.

Yhteenveto

  • Viitekehys on joukko kirjastoja, jotka toteuttavat yhteisiä tehtäviä osittain.
  • PHP:llä on useita avoimen lähdekoodin kypsiä ja testattuja MVC-kehyksiä.
  • Hyvä kehitystapa erottaa tiedot esityksestä ja kannustaa käyttämään sovelluksessa yhden syöttöpisteen käyttöä.
  • Perinteiset PHP-sovellukset, jotka noudattavat sovellussuunnittelun parhaita käytäntöjä, voidaan siirtää MVC-kehyksiin pienin muutoksin.