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.

Tiivistรค tรคmรค viesti seuraavasti: