PHP MVC raamistiku õpetus

⚡ Nutikas kokkuvõte

PHP MVC raamistiku disain eraldab rakenduse andmed ja äriloogika esitlusest, kasutades mudeleid, vaateid ja kontrollereid. CodeIgniter muudab selle mustri praktiliseks, võimaldades PHP arendajatel kiiremini luua turvalisi ja hooldatavaid veebirakendusi.

  • 🧩 Muster: MVC jagab rakenduse puhtama koodi saamiseks mudeliks (andmed), vaateks (esitlus) ja kontrolleriks (päringute käsitlemine).
  • 🚀 Tootlikkus: Raamistikud pakuvad andmebaasidele juurdepääsu, valideerimise ja sisendi puhastamise eelvalmistatud teeke, et meeskonnad saaksid funktsioone kiiremini pakkuda.
  • 🛠️ Valikud: CodeIgniter, CakePHP ja Laminas (endine Zend) jäävad aktiivseteks valikuteks, samas kui Kohana tootmine lõpetati 2017. aastal.
  • 🗄️ Mudel: In CodeIgniter, mudelid laiendavad CI_Modeli ja kasutavad turvaliste andmebaasitoimingute jaoks päringu koostaja meetodeid.
  • 🎮 kontroller: Kontrollerid laiendavad CI_Controllerit, loevad sisendklassi kaudu kasutaja sisendit ja laadivad õige vaate.
  • 📈 Mõju: Lihtsa PHP poll-rakenduse portimine näitab, kuidas MVC struktuur vähendab dubleerimist ja lihtsustab pikaajalist hooldust.

PHP MVC raamistik

Mis on PHP MVC raamistik?

PHP MVC on rakenduse kujundusmuster, mis eraldab rakenduse andmed ja äriloogika (mudel) esitlusest (vaatest). MVC tähistab mudelit, vaadet ja kontrollerit.

Kontroller vahendab mudelite ja vaadete vahel.

Mõelge MVC disainimustrile kui autole ja juhile.

Autol on esiklaasid (vaade), mida juht (juhtimine) kasutab eesoleva liikluse jälgimiseks ning seejärel kiirendamiseks või pidurdamiseks (mudel) olenevalt sellest, mida ta ees näeb.

Järgmisena vaatame, miks selle mustri põhjal loodud raamistikku tasub kasutada.

Miks kasutada PHP MVC Frameworki?

PHP MVC raamistikud lihtsustavad keerukate tehnoloogiatega töötamist järgmiselt:

  • Peida kõik keerukad rakenduse üksikasjad
  • Pakume standardmeetodeid, mida saame oma rakenduste loomiseks kasutada
  • Arendaja tootlikkuse suurendamine, kuna tegevuste (nt andmebaasiga ühenduse loomine ja kasutaja sisendi puhastamine) baasrakendused on juba osaliselt rakendatud.
  • Professionaalsete kodeerimisstandardite järgimise julgustamine

PHP MVC disainimuster

Arutleme nüüd lühidalt MVC disainimustri iga komponendi üle.

MUDEL – see osa käsitleb äriloogikat ja rakenduse andmeid. Seda saab kasutada andmete valideerimiseks, andmete töötlemiseks ja salvestamiseks. Andmed võivad pärineda;

  • lame fail
  • andmebaas
  • XML-dokument
  • Muud kehtivad andmeallikad.

kontroller – see on osa, mis tegeleb kasutaja ressursside päringutega serverilt.

Näiteks, kui kasutaja taotleb URL …/index.php?products=list, laadib kontroller tootemudeli tooteandmete hankimiseks ja kuvab tulemused seejärel loendivaates.

Lühidalt, kontroller seob mudelid ja vaated olenevalt nõutud ressurssidest.

views – see osa tegeleb andmete esitamisega kasutajale. Tavaliselt toimub see HTML-lehtede kujul.

PHP MVC raamistiku tüübid

Parima PHP raamistiku valimine on väljakutse.

MVC eeliste kasutamiseks ei pea te ise oma raamistikku kirjutama.

Peaksite proovima luua ainult oma MVC-ga seotud rakenduse disaini, et mõista, kuidas MVC-raamistikud töötavad.

Kui olete rahul sellega, kuidas MVC raamistikud töötavad, peaksite liikuma küpsete ja juba testitud raamistike juurde.

Allolev tabel kirjeldab lühidalt mõningaid populaarseid PHP raamistikke ja funktsioone, mida iga raamistik pakub.

Raamistik Kirjeldus

Codeelektrisütik


Codeelektrisütik


https://codeigniter.com/

See on üks populaarsemaid PHP MVC raamistikke, mis on nüüd oma neljandas suuremas versioonis (CodeIgniter 4). See on kerge ja lühikese õppimiskõveriga. Sellel on rikkalik teekide komplekt, mis aitab kiiresti veebisaite ja rakendusi luua. Seda saavad kasutada ka kasutajad, kellel on piiratud teadmised OOP-programmeerimisest. Rakendused, mis on loodud CodeSüütaja hulka kuulub;


kohana


kohana


http://kohanaframework.org

See on turvaline ja kerge raamistik, mis põhineb hierarhilisel mudelivaate kontrolleril (HMVC). Märge: Kohana ametlikult lõpetati 2017. aastal; selle viimane stabiilne versioon oli 3.3.6 (juuli 2016). Kogukonna haru Koseven jätkas oma koodibaasi. Ettevõtted, mis Kohanat kasutasid, on järgmised:


CakePHP


CakePHP


www.cakephp.org

See on loodud Ruby on Railsi eeskujul ja seda hooldatakse aktiivselt (versioon 5.x). See on tuntud selliste kontseptsioonide poolest nagu tarkvara disainimustrid, konfigureerimise konventsioon, ActiveRecord jne. CakePHP toitega rakenduste hulka kuuluvad;


Zend

https://getlaminas.org/


Zend (nüüd Laminas)

See on võimas raamistik, mis on;

  • Turvaline, usaldusväärne, kiire ja skaleeritav
  • Toetab veebiteenuste ja API-de loomist.

See on ideaalne arendamiseksping ärirakendused. 2020. aastal läks Zend Framework üle avatud lähtekoodiga Laminas projektile. Zendi/Laminase baasil loodud rakendused hõlmavad järgmist:

  • Pimcore CMS,
  • DotKernel.

Ettevõtted, mis on kasutanud Zend raamistikku, on järgmised:

  • BBC
  • Cisco
  • Webex
  • Pakkumised.com

PHP MVC raamistik vs tavaline PHP: peamised erinevused

Mida raamistik praktikas muudab? Tavaline PHP annab sulle täieliku vabaduse, aga iga projekt loob marsruutimise, valideerimise ja andmebaasile juurdepääsu nullist uuesti. PHP MVC raamistik standardiseerib need korduvad ülesanded, nii et sinu kood jääb projektide ja meeskondade lõikes järjepidevaks.

Aspekt Lihtne PHP PHP MVC raamistik
Code organisatsioon HTML, SQL ja loogika segatud ühes failis Jaotatud mudeliteks, vaadeteks ja kontrolleriteks
Juurdepääs andmebaasile Käsitsi kirjutatud päringud igal lehel Sisseehitatud päringukoostaja või ORM parameetri sidumisega
TURVALISUS Arendaja peab meeles pidama kõiki ettevaatusabinõusid Sisendi filtreerimine, XSS ja CSRF kaitse on kaasas
Hooldus Muudatused levivad failides ettearvamatult Iga kiht saab iseseisvalt muutuda

👍 Vihje: Ehita esmalt üks väike lihtne PHP projekt, nagu allolevas arvamusküsitluses näidatud; segakoodiga kaasnevad probleemid teevad MVC eraldamise väärtuse ilmseks.

Arvamusküsitluse rakenduse portimine Codeelektrisütik

Selle juhendaja, lõime PHP küsitlusrakenduse. Siin portime selle koodi Codeelektrisütik

  • Lae uusim versioon CodeSüütaja nende käest kodulehel.
  • ExtracKopeeri zip-faili sisu oma veebiserveri kataloogis asuvasse arenduskataloogi. Selles õppetükis kasutame kausta nimena ciopinionpoll.
  • Sirvige jaotist URL http://localhost/ciopinionpoll/

CodeIgniteri tervitusleht kuvatakse pärast ekstracraamistiku loomine

. CodeÜlalolev Igniteri tervitusleht kinnitab, et raamistik on õigesti installitud. Nüüd portime oma arvamusküsitluse rakenduse CodeSüütaja. Tuletame meelde, et meie rakendus oli jagatud kolmeks põhikomponendiks, nimelt;

  • Eesmine kontroller – see on osa, mis reageerib URL päringud ja tagastab soovitud lehe. See kood läheb kontrollerisse
  • Mudel – see on kood, mis vastab andmepäringutele ja tagastab nõutud andmed. See kood läheb mudelisse.
  • Views – see on kood, mis vastutab andmete vormindamise ja kuvamise eest. See kood kuvatakse vaatesse

Andmebaasi konfiguratsiooni sätted

Andmebaasiühenduse konfigureerimiseks toimige järgmiselt.

  • Sirvi kausta ciopinionpoll
  • avage andmebaas.php fail, mis asub kataloogis application/config.
  • Otsige üles järgmised koodiread

Andmebaasi konfiguratsiooniseaded jaotises CodeSüütaja andmebaas.php fail

  • Määra kasutajanimeks root
  • Määrake parooliks oma localhost root parool
  • Määra andmebaasi nimeks opinion_poll. Pane tähele, et me kasutame eelmises tunnis loodud andmebaasi.
  • Salvestage muudatused ja sulgege fail.

Meie mudeli loomine

Järgmisena loome mudeli, mis laiendab CI_Modeli. CI_Model on osa sellest. CodeSüütaja teegid. Mudel asub kaustas application/models. arvamus_küsitlus_mudel.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);
    }
}
?>

SIIN,

  • "Class Opinion_poll_model laiendab CI_Modelit..." on meie mudel, mis laiendab mudelit CI_Model
  • „parent::__construct();” kutsub CI_Model konstruktorit
  • "$this->load->database();" laadib andmebaasi teegi, et meie rakendus saaks andmebaasiga suhelda
  • „$this->db->” on CodeSüütaja aktiivne kirje. Kontrolli seda link aktiivse kirje kohta lisateabe saamiseks.

Meie kontrolleri loomine

Loome nüüd kontrolleri. Kasutame vaikeseadet CodeSüütaja kontroller asub failis application/controllers/welcome.php. Asenda selle lähtekood järgmise koodiga.

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

SIIN,

  • "if (!defined('BASEPATH')) exit('Otsene skripti juurdepääs pole lubatud');" tagab, et kasutajad ei pääse otse kontrolleriklassile
  • "class Welcome laiendab CI_Controlleri..." meie kontroller laiendab klassi CI_Controller
  • „public function __construct()” kutsub CI_Controlleri klassi konstruktori meetodit ja laadib meie Opinion_poll_model mudeli
  • „Public function index()…“ on funktsioon, mis seob faili index.php. See kasutab CodeIgniteri sisendklass kontrollib, kas hääl on esitatud, lisab selle andmebaasi ja kuvab seejärel tulemused. Kui sisendklassi post-massiiv on tühi, laaditakse hääletusleht.
  • „$this->input->post('…')” on CodeSüütaja sisendklass, mis haarab globaalse muutuja $_POST sisu.
  • “$this->opinion_poll_model->add_vote($this->input->post('vote'))” kutsub hääle andmebaasi lisamiseks mudeli add_vote meetodit.

Meie vaadete loomine

Tuletage eelmisest näitest meelde, et meil oli kaks HTML-lehte, üks hääletamiseks ja teine ​​tulemuste jaoks. Kasutame sama HTML-koodi minimaalsete muudatustega oma vaadete loomiseks. Looge järgmised failid kataloogi application/views

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>

Loome nüüd tulemuste lehe 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>

Meie rakenduse testimine

Eeldades, et teie rakenduse juurkataloog on ciopinionpoll, sirvige http://localhost/ciopinionpoll/

Arvamusküsitluse hääletusvorm, mille on esitanud CodeSüütaja rakendus

Ülalolev hääletusleht pärineb meie opinion_poll_form vaatest. Klõpsake nuppu OK ilma valikut valimata ja näete järgmist teavitussõnumit.

Kui ühtegi häält pole valitud, kuvatakse valideerimise hoiatusteade

Hääleta oma lemmikraamatukogu poolt ja seejärel klõpsa nupul OK. Näed järgmist tulemuste lehte.

Arvamusküsitluste tulemuste leht, mis näitab häälte arvu inimese kohta JavaSkriptide kogu

See kinnitab kolme kihi koostööd: kontroller võttis hääle vastu, mudel salvestas ja loendas selle ning vaade kuvas kogusummasid.

KKK

HMVC (hierarhiline mudelivaate kontroller) korraldab rakenduse sõltumatuteks MVC-triaadideks, mis saavad üksteist kutsuda. Raamistikud, näiteks kohana populariseeris HMVC-d, kuna see aitab suuri rakendusi moduleerida.

Jah. Laravel on hetkel populaarseim PHP MVC raamistik. See järgib sama Model-View-Controller eraldatust, mida siin on kirjeldatud, lisades tööriistu nagu Eloquent ORM ja Blade mallid.

Jah. Tööriistad nagu GitHubi koopia saab käskude abil mudeleid, kontrollereid ja vaateid tellingutena luua. Siiski peaksite genereeritud koodi üle vaatama turvaprobleemide, näiteks varjestamata väljundi ja SQL-süstimise suhtes.

Ei. Tehisintellekti assistendid kiirendavad koodi kirjutamist, kuid raamistikud pakuvad endiselt testitud struktuuri, turvaseadeid ja konventsioone, mis hoiavad rakendused hooldatavana. Need kaks toimivad kõige paremini koos.

Ei. Codeelektrisütik on sõbralik arendajatele, kellel on piiratud objektorienteeritud programmeerimise kogemus. Klasside, meetodite ja pärimise põhitõdede tundmisest piisab selle mudeli ja kontrolleri mustrite jälgimiseks.

Võta see postitus kokku järgmiselt: