PHP MVC Framework Tutorial

โšก ร„lykรคs yhteenveto

PHP MVC Frameworkin suunnittelussa sovellusdata ja liiketoimintalogiikka erotetaan esityksistรค mallien, nรคkymien ja ohjainten avulla. CodeIgniter tekee tรคstรค mallista kรคytรคnnรถllisen, jolloin PHP-kehittรคjรคt voivat rakentaa turvallisia ja yllรคpidettรคviรค verkkosovelluksia nopeammin.

  • ๐Ÿงฉ Kuvio: MVC jakaa sovelluksen malliin (data), nรคkymรครคn (esitys) ja ohjaimeen (pyyntรถjen kรคsittely) siistimmรคn koodin aikaansaamiseksi.
  • ๐Ÿš€ tuottavuus: Kehykset toimittavat valmiiksi rakennettuja kirjastoja tietokannan kรคyttรถรค, validointia ja syรถtteen puhdistusta varten, joten tiimit voivat toimittaa ominaisuuksia nopeammin.
  • ๐Ÿ› ๏ธ Vaihtoehdot: CodeIgniter, CakePHP ja Laminas (entinen Zend) ovat edelleen aktiivisia vaihtoehtoja, kun taas Kohana lopetettiin vuonna 2017.
  • ๐Ÿ—„๏ธ Malli: In CodeIgniter-mallit laajentavat CI_Model-mallia ja kรคyttรคvรคt kyselynmuodostajametodeja turvallisiin tietokantatoimintoihin.
  • ๐ŸŽฎ ohjain: Ohjaimet laajentavat CI_Controller-luokkaa, lukevat kรคyttรคjรคn syรถtteen syรถteluokan kautta ja lataavat oikean nรคkymรคn.
  • ๐Ÿ“ˆ Vaikutus: Yksinkertaisen PHP-kyselysovelluksen porttaaminen osoittaa, kuinka MVC-rakenne vรคhentรครค pรครคllekkรคisyyksiรค ja yksinkertaistaa pitkรคaikaista yllรคpitoa.

PHP MVC -kehys

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รค), joiden avulla kuljettaja (ohjain) seuraa edessรค olevaa liikennettรค ja sitten kiihdyttรครค tai jarruttaa (malli) sen mukaan, mitรค hรคn nรคkee edessรครคn.

Seuraavaksi katsotaanpa, miksi tรคmรคn mallin pohjalta rakennettua viitekehystรค kannattaa kรคyttรครค.

Miksi kรคyttรครค PHP MVC Frameworkia?

PHP MVC -kehykset yksinkertaistavat tyรถskentelyรค monimutkaisten teknologioiden kanssa:

  • Piilottaa kaikki monimutkaiset toteutustiedot
  • Tarjoamalla standardimenetelmiรค, joita voimme kรคyttรครค sovellustemme rakentamiseen
  • Kehittรคjien tuottavuuden lisรครคminen, koska toimintojen, kuten tietokantaan yhteyden muodostamisen ja kรคyttรคjรคsyรถtteen puhdistamisen, perustoteutukset on jo osittain toteutettu
  • Ammattimaisten koodausstandardien noudattamisen kannustaminen

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รค on osa, joka kรคsittelee kรคyttรคjรคn palvelimelta tulevia resurssipyyntรถjรค.

Esimerkiksi, kun kรคyttรคjรค pyytรครค URL โ€ฆ/index.php?products=list, ohjain lataa tuotemallin hakeakseen tuotetiedot ja nรคyttรครค sitten tulokset listanรคkymรคssรค.

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

Nรคyttรถkerrat โ€“ tรคmรค osa kรคsittelee datan esittรคmistรค kรคyttรคjรคlle. Tรคmรค tapahtuu 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 oleva taulukko kuvaa lyhyesti joitakin suosittuja PHP-kehyksiรค ja ominaisuuksia, joita kukin kehys tarjoaa.

Puitteet Tuotetiedot

Codesytytin


Codesytytin


https://codeigniter.com/

Se on yksi suosituimmista PHP MVC -kehyksistรค, nyt neljรคnnessรค pรครคversiossaan (CodeIgniter 4). Se on kevyt ja sillรค on lyhyt oppimiskรคyrรค. Siinรค on laaja valikoima kirjastoja, jotka auttavat rakentamaan verkkosivustoja ja sovelluksia nopeasti. Myรถs kรคyttรคjรคt, joilla on rajoitetusti tietoa OOP-ohjelmoinnista, voivat kรคyttรครค sitรค. Sovellukset, jotka on rakennettu CodeSytytin sisรคltรครค;


kohana


kohana


http://kohanaframework.org

Se on hierarkkinen mallinรคkymรคohjain (HMVC) -ympรคristรถ, joka on turvallinen ja kevyt. Huomautus: Kohana lopetettiin virallisesti vuonna 2017; sen viimeisin vakaa julkaisu oli 3.3.6 (heinรคkuu 2016). Yhteisรถhaara Koseven jatkoi koodikantaansa. Kohanaa kรคyttรคneitรค yrityksiรค olivat muun muassa;


cakePHP


cakePHP


www.cakephp.org

Se on mallinnettu Ruby on Railsin mukaan ja sitรค yllรคpidetรครคn aktiivisesti (versio 5.x). Se tunnetaan kรคsitteistรค, kuten ohjelmistosuunnittelumalleista, konfigurointikรคytรคnnรถistรค, ActiveRecordista jne. cakePHP powered sovelluksia ovat;


Zend

https://getlaminas.org/


Zend (nykyisin Laminas)

Se on voimakas kehys;

  • Turvallinen, luotettava, nopea ja skaalautuva
  • Tukee web-palveluiden ja API-rajapintojen luomista.

Se on ihanteellinen kehitystyรถhรถnping liiketoimintasovellukset. Vuonna 2020 Zend Framework siirtyi avoimen lรคhdekoodin Laminas-projektiin. Zend/Laminas-pohjaisiin sovelluksiin kuuluvat:

  • Pimcore CMS,
  • DotKernel.

Zend-kehystรค kรคyttรคneitรค yrityksiรค ovat muun muassa:

  • BBC
  • Cisco
  • WebEx
  • Offers.com

PHP MVC Framework vs. tavallinen PHP: Keskeiset erot

Mitรค kehys oikeastaan โ€‹โ€‹muuttaa kรคytรคnnรถssรค? Tavallinen PHP antaa tรคyden vapauden, mutta jokainen projekti joutuu keksimรครคn reitityksen, validoinnin ja tietokannan kรคytรถn uudelleen tyhjรคstรค. PHP MVC -kehys standardoi nรคmรค toistuvat tehtรคvรคt, joten koodisi pysyy yhdenmukaisena eri projektien ja tiimien vรคlillรค.

Aspect Pelkkรค PHP PHP MVC -kehys
Code organisaatio Sekoitettu HTML, SQL ja logiikka yksittรคisissรค tiedostoissa Jaettu malleihin, nรคkymiin ja ohjaimiin
Pรครคsy tietokantaan Kรคsin kirjoitettuja kyselyitรค jokaisella sivulla Sisรครคnrakennettu kyselyiden rakentaja tai ORM parametrisidonnalla
Turvallisuus Kehittรคjรคn on muistettava kaikki suojatoimet Sisรครคntulosuodatus, XSS ja CSRF-suojaus sisรคltyvรคt
Hoito-ohjeet Muutokset aaltoilevat arvaamattomasti tiedostojen lรคpi Jokainen kerros voi muuttua itsenรคisesti

๐Ÿ’ก Vinkki: Rakenna ensin yksi pieni, tavallinen PHP-projekti, kuten alla olevassa mielipidekyselyssรค; sekakoodin aiheuttama hankaluus tekee MVC-erottelun arvon ilmeiseksi.

Mielipidekyselysovelluksen siirtรคminen palveluun Codesytytin

Tรคssรค oppitunti, loimme PHP-kyselysovelluksen. Tรคssรค porttaamme kyseisen koodin palveluun Codesytytin

  • Lataa uusin versio CodeSytytin heidรคn -sivustolta.
  • Extract zip-tiedoston sisรคltรถ web-palvelimesi hakemistossa olevaan kehityshakemistoosi. Kรคytรคmme tรคllรค oppitunnilla kansion nimenรค ciopinionpoll-tiedostoa.
  • Selaa URL http://localhost/ciopinionpoll/

CodeIgniterin tervetulosivu nรคytetรครคn entisen jรคlkeentracviitekehyksen laatiminen

CodeYllรค oleva Igniterin tervetulosivu vahvistaa, ettรค kehys on asennettu oikein. Aiomme nyt siirtรครค mielipidekyselysovelluksemme palveluun CodeSytytin. Muista, ettรค sovelluksemme oli jaettu kolmeen pรครคkomponenttiin, nimittรคin;

  • Etuohjain โ€“ tรคmรค on osa, joka reagoi URL pyytรครค ja palauttaa pyydetyn sivun. Tรคmรค koodi menee ohjaimeen
  • Malli โ€“ tรคmรค on koodi, joka vastaa datapyyntรถihin ja palauttaa pyydetyt tiedot. Tรคmรค koodi lisรคtรครคn malliin.
  • Nรคkymรคt โ€“ tรคmรค koodi vastaa tietojen muotoilusta ja nรคyttรคmisestรค. Tรคmรค koodi siirtyy nรคkymรครคn

Tietokannan kokoonpanoasetukset

Tietokantayhteyden mรครคrittรคminen:

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

Tietokannan mรครคritysasetukset kohdassa CodeIgniter-tietokanta.php-tiedosto

  • Aseta kรคyttรคjรคnimi rootiksi
  • Aseta salasanaksi localhost-pรครคkรคyttรคjรคn salasana
  • Aseta tietokannan nimeksi mielipidekysely. Huomaa, ettรค kรคytรคmme edellisellรค oppitunnilla luotua tietokantaa.
  • Tallenna muutokset ja sulje tiedosto.

Mallimme luominen

Seuraavaksi luomme mallin, joka laajentaa CI_Model-mallia. CI_Model on osa CodeSytytyskirjastot. Malli sijaitsee kansiossa application/models. mielipidekysely_malli.php

<?php
class Opinion_poll_model extends CI_Model
{
    public function __construct()
    {
        parent::__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++)
        {
            $query = $this->db->select('COUNT(choice) as choices_count')
                              ->where('choice', $i)
                              ->get('js_libraries');

            $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
        }

        return $table_rows;
    }

    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 CodeSytyttimen aktiivinen tietue. Tarkista tรคmรค. linkkiรค lisรคtietoja aktiivisesta tietueesta.

Ohjaimen luominen

Luodaan nyt ohjain. Kรคytรคmme oletusarvoa CodeSytytysohjain sijaitsee tiedostossa application/controllers/welcome.php. Korvaa sen lรคhdekoodi 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 konstruktorimetodia ja lataa Opinion_poll_model-mallimme
  • โ€public function index()โ€ฆโ€ on funktio, joka kuvaa index.php-tiedostoa. Se kรคyttรครค CodeIgniterin syรถteluokka, joka tarkistaa, onko รครคni lรคhetetty, lisรครค sen tietokantaan ja nรคyttรครค tulokset. Jos syรถteluokan post-taulukko on tyhjรค, se lataa รครคnestyssivun.
  • โ€$this->input->post('โ€ฆ')โ€ on CodeSytyttimen syรถteluokka, joka poimii $_POST-globaalin muuttujan 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, toinen รครคnestystรค ja toinen tuloksia varten. Kรคytรคmme samaa HTML-koodia minimaalisin muutoksin nรคkymien luomiseen. Luo seuraavat tiedostot application/views-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

Olettaen, ettรค sovelluksesi juurihakemisto on ciopinionpoll, selaa osoitteeseen http://localhost/ciopinionpoll/

Mielipidekyselyn รครคnestyslomake, jonka on tehnyt CodeSytyttimen sovellus

Yllรค oleva รครคnestyssivu on perรคisin mielipidekyselylomake-nรคkymรคstรคmme. Napsauta OK valitsematta vaihtoehtoa, niin nรคet seuraavan varoitusviestin.

Vahvistushรคlytysviesti nรคytetรครคn, kun รครคntรค ei ole valittu

ร„รคnestรค suosikkikirjastoasi ja napsauta sitten OK. Nรคet seuraavan tulossivun

Mielipidekyselyn tulossivu, joka nรคyttรครค รครคnten mรครคrรคn per JavaSkriptikirjasto

Tรคmรค vahvistaa, ettรค kolme tasoa toimivat yhdessรค: ohjain vastaanotti รครคnen, malli tallennti ja laski sen, ja nรคkymรค nรคytti kokonaissummat.

UKK

HMVC (Hierarchical Model View Controller) jรคrjestรครค sovelluksen itsenรคisiksi MVC-kolmikoiksi, jotka voivat kutsua toisiaan. Kehykset, kuten kohana teki HMVC:stรค suositun, koska se auttaa modularisoimaan suuria sovelluksia.

Kyllรค. Laravel on tรคllรค hetkellรค suosituin PHP MVC -kehys. Se noudattaa samaa tรคssรค kuvattua Model-View-Controller-erottelua, ja siihen on lisรคtty tyรถkaluja, kuten Eloquent ORM- ja Blade-mallit.

Kyllรค. Tyรถkalut kuten GitHub Copilot voi luoda malleja, ohjaimia ja nรคkymiรค kehotteista. Sinun tulisi silti tarkistaa luotu koodi tietoturvaongelmien, kuten koodinvaihtomerkkien kรคytรถn ja SQL-injektion, varalta.

Ei. Tekoรคlyavustajat nopeuttavat koodin kirjoittamista, mutta kehykset tarjoavat silti testatun rakenteen, suojausoletusasetukset ja kรคytรคnnรถt, jotka pitรคvรคt sovellukset yllรคpidettรคvinรค. Nรคmรค kaksi toimivat parhaiten yhdessรค.

Ei. Codesytytin on ystรคvรคllinen kehittรคjille, joilla on rajoitetusti kokemusta olio-ohjelmoinnista. Luokkien, metodien ja periytymisen perusteiden tunteminen riittรครค mallin ja kontrollerikuvioiden seuraamiseen.

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