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: