PHP MVC Framework oktatóanyag

⚡ Okos összefoglaló

A PHP MVC keretrendszer tervezése modellek, nézetek és vezérlők segítségével elválasztja az alkalmazásadatokat és az üzleti logikát a megjelenítéstől. CodeAz Igniter ezt a mintát praktikussá teszi, lehetővé téve a PHP-fejlesztők számára, hogy gyorsabban építsenek biztonságos, karbantartható webes alkalmazásokat.

  • 🧩 Minta: Az MVC az alkalmazást modellre (adatok), nézetre (megjelenítés) és vezérlőre (kérések kezelése) osztja fel a tisztább kód érdekében.
  • 🚀 Termelékenység: A keretrendszerek előre elkészített könyvtárakat biztosítanak az adatbázis-hozzáféréshez, az validációhoz és a bemeneti adatok tisztításához, így a csapatok gyorsabban szállíthatják a funkciókat.
  • 🇧🇷 Opciók: CodeAz Igniter, a CakePHP és a Laminas (korábban Zend) továbbra is aktív választások, míg a Kohana 2017-ben megszűnt.
  • 🗄️ Modell: In CodeAz Igniter modellek kiterjesztik a CI_Model-t, és lekérdezéskészítő metódusokat használnak a biztonságos adatbázis-műveletekhez.
  • 🎮 Vezérlő: A vezérlők kiterjesztik a CI_Controllert, beolvassák a felhasználói bemenetet a bemeneti osztályon keresztül, és betöltik a megfelelő nézetet.
  • 📈 Hatás: Egy egyszerű PHP poll alkalmazás portolása megmutatja, hogyan csökkenti az MVC struktúra a duplikációt és egyszerűsíti a hosszú távú karbantartást.

PHP MVC keretrendszer

Mi az a PHP MVC keretrendszer?

A PHP MVC egy alkalmazástervezési minta, amely elválasztja az alkalmazás adatait és az üzleti logikát (modellt) a prezentációtól (nézettől). Az MVC a Model, View & Controller rövidítése.

A vezérlő közvetít a modellek és nézetek között.

Gondoljon az MVC tervezési mintájára autóként és vezetőként.

Az autó szélvédőkkel (nézet) rendelkezik, amelyeket a vezető (irányító) használ az előtte lévő forgalom figyelésére, majd a látottak alapján gyorsít vagy fékez (modell).

Következőként nézzük meg, miért érdemes egy erre a mintára épülő keretrendszert használni.

Miért érdemes PHP MVC Framework-et használni?

A PHP MVC keretrendszerek leegyszerűsítik az összetett technológiákkal való munkát az alábbiak révén:

  • Az összes bonyolult megvalósítási részlet elrejtése
  • Szabványos módszerek biztosítása, amelyeket alkalmazásaink felépítéséhez használhatunk
  • A fejlesztők termelékenységének növelése, mivel az olyan tevékenységek alapvető implementációi, mint az adatbázishoz való csatlakozás és a felhasználói bevitel fertőtlenítése, már részben implementáltak.
  • A professzionális kódolási szabványok betartásának ösztönzése

PHP MVC tervezési minta

Most röviden tárgyaljuk az MVC tervezési minta egyes összetevőit.

Modell – ez a rész az üzleti logikával és az alkalmazási adatokkal foglalkozik. Használható adatellenőrzések elvégzésére, adatok feldolgozására és tárolására. Az adatok származhatnak;

  • lapos reszelő
  • adatbázis
  • XML dokumentum
  • Egyéb érvényes adatforrások.

ellenőr – ez az a rész, amely a felhasználó szervertől érkező erőforrás-kéréseivel foglalkozik.

Például, amikor a felhasználó kéri a URL …/index.php?products=list, a vezérlő betölti a termékek modelljét a termékek adatainak lekéréséhez, majd kiírja az eredményeket listanézetben.

Dióhéjban, a vezérlő összekapcsolja a modelleket és a nézeteket a kért erőforrásoktól függően.

Nézetek – ez a rész az adatok felhasználónak való megjelenítésével foglalkozik. Ez általában HTML oldalak formájában történik.

A PHP MVC keretrendszer típusai

A legjobb PHP keretrendszer kiválasztása kihívást jelent.

Nem kell saját keretrendszert írnia ahhoz, hogy kihasználja az MVC előnyeit.

Csak az MVC-keretrendszerek működésének megértése érdekében próbálkozzon saját, MVC-vel kapcsolatos alkalmazásterv létrehozásával.

Ha elégedett az MVC-keretrendszerek működésével, lépjen tovább a kiforrott és már tesztelt keretrendszerekre.

Az alábbi táblázat röviden ismertet néhány népszerű PHP keretrendszert és az egyes keretrendszerek által kínált funkciókat.

Keretrendszer Leírás

CodeGyújtó


CodeGyújtó


https://codeigniter.com/

Ez az egyik legnépszerűbb PHP MVC keretrendszer, amely most a negyedik fő verziójánál tart (CodeIgniter 4). Könnyű és gyorsan megtanulható. Gazdag könyvtárkészlettel rendelkezik, amely segít gyorsan weboldalakat és alkalmazásokat létrehozni. Az OOP programozásban korlátozott ismeretekkel rendelkező felhasználók is használhatják. A következővel készült alkalmazások: CodeGyújtó tartalmazza;


kohana


kohana


http://kohanaframework.org

Ez egy hierarchikus modellnézet-vezérlő (HMVC) biztonságos és könnyű keretrendszer. Jegyzet: A Kohana hivatalosan 2017-ben megszűnt; az utolsó stabil kiadása a 3.3.6 volt (2016. július). A közösségi fork, a Koseven folytatta a kódbázisát. A Kohanát használó cégek többek között:


CakePHP


CakePHP


www.cakephp.org

A Ruby on Rails mintájára készült, és aktívan karbantartják (5.x verzió). Ismert olyan koncepciókról, mint a szoftvertervezési minták, a konfigurációs konvenciók, az ActiveRecord stb. CakePHP powered alkalmazások közé tartozik;


Zend

https://getlaminas.org/


Zend (ma Laminas)

Ez egy erőteljes keret;

  • Biztonságos, megbízható, gyors és méretezhető
  • Támogatja webszolgáltatások és API-k létrehozását.

Ideális a fejlesztéshezping üzleti alkalmazások. 2020-ban a Zend Framework átállt a nyílt forráskódú Laminas Projectre. A Zend/Laminas alapú alkalmazások a következők:

  • Pimcore CMS,
  • DotKernel.

A Zend keretrendszert használó vállalatok többek között:

  • BBC
  • Cisco
  • Webex
  • Offers.com

PHP MVC keretrendszer vs. sima PHP: Főbb különbségek

Mit változtat meg egy keretrendszer a gyakorlatban? Az egyszerű PHP teljes szabadságot ad, de minden projekt a nulláról újraértelmezi az útvonalválasztást, az validációt és az adatbázis-hozzáférést. Egy PHP MVC keretrendszer szabványosítja ezeket az ismétlődő feladatokat, így a kódod konzisztens marad a projektek és csapatok között.

Aspect Sima PHP PHP MVC keretrendszer
Code szervezet HTML, SQL és logika keverése egyetlen fájlban Modellekre, nézetekre és vezérlőkre bontva
Adatbázis hozzáférés Kézzel írott kérdések minden oldalon Beépített lekérdezéskészítő vagy ORM paraméterkötéssel
Biztonság A fejlesztőnek minden biztonsági óvintézkedésre emlékeznie kell Bemeneti szűrés, XSS és CSRF védelem benne foglaltatik
Karbantartás A változások kiszámíthatatlanul hullámzanak át a fájlokon Minden réteg egymástól függetlenül változhat

👍 Tipp: Először építs egy kicsi, sima PHP projektet, mint az alábbi közvélemény-kutatásban; a vegyes kód okozta nehézségek nyilvánvalóvá teszik az MVC szétválasztásának értékét.

A közvélemény-kutatási alkalmazás portolása ide: CodeGyújtó

Ebben oktatói, létrehoztunk egy PHP szavazóalkalmazást. Itt ezt a kódot fogjuk átvinni a következőre: CodeGyújtó

  • Letöltés legújabb verziója CodeGyújtó a sajátjukból weboldal.
  • ExtracMásold át a zip fájl tartalmát a webszervered könyvtárában található fejlesztői könyvtáradba. Ebben a leckében a ciopinionpoll mappanevet fogjuk használni.
  • Tallózás a URL http://localhost/ciopinionpoll/

CodeIgniter üdvözlőoldala látható az ex utántraca keretrendszer

Az CodeA fenti Igniter üdvözlőoldal megerősíti, hogy a keretrendszer megfelelően telepítve van. Most át fogjuk vinni a közvélemény-kutatási alkalmazásunkat a következőre: CodeGyújtó. Emlékezzünk vissza, hogy az alkalmazásunk három fő részre oszlott, nevezetesen a következőkre:

  • Elülső vezérlő – ez az a rész, amely reagál a URL lekérdezi és visszaadja a kért oldalt. Ez a kód a vezérlőbe kerül
  • Modell – ez az a kód, amely válaszol az adatkérésekre és visszaadja a kért adatokat. Ez a kód kerül be a modellbe.
  • Nézetek – ez az adatok formázásáért és megjelenítéséért felelős kód. Ez a kód megjelenik a nézetben

Adatbázis konfigurációs beállítások

Az adatbázis-kapcsolat konfigurálásához:

  • Tallózással keresd meg a ciopinionpoll mappát.
  • Nyissa meg a adatbázis.php fájl, amely az application/config könyvtárban található.
  • Keresse meg a következő kódsorokat

Adatbázis-konfigurációs beállítások itt: CodeIgniter database.php fájl

  • Állítsa be a felhasználónevet root-ra
  • Állítsd be a jelszót a localhost root jelszavadra
  • Állítsd be az adatbázis nevét opinion_poll-ra. Figyelem: az előző leckében létrehozott adatbázist fogjuk használni.
  • Mentse el a változtatásokat, és zárja be a fájlt.

Modellünk elkészítése

Következő lépésként létrehozzuk a modellünket, amely kiterjeszti a CI_Model-t. A CI_Model a következő része: CodeGyújtókönyvtárak. A modell az application/models mappában található. vélemény_szavazás_modell.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);
    }
}
?>

ITT,

  • A „class Opinion_poll_model kiterjeszti a CI_Modelt…” a mi modellünk, amely kiterjeszti a CI_Modelt
  • A „parent::__construct();” meghívja a CI_Model konstruktorát
  • "$this->load->database();" betölti az adatbázis-könyvtárat, hogy az alkalmazásunk együttműködhessen az adatbázissal
  • „$this->db->” CodeA gyújtó aktív rekordja. Nézd meg ezt. link további információkért az aktív rekordról.

A vezérlőnk létrehozása

Most hozzuk létre a vezérlőt. Az alapértelmezett értéket fogjuk használni. CodeAz application/controllers/welcome.php fájlban található gyújtóvezérlő. Cserélje le a forráskódját a következő kódra.

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

ITT,

  • "if (!defined('BASEPATH')) exit('Nem engedélyezett közvetlen szkript hozzáférés');" biztosítja, hogy a felhasználók ne férhessenek hozzá közvetlenül a vezérlőosztályhoz
  • „Class Welcome kiterjeszti a CI_Controllert…” vezérlőnk kiterjeszti a CI_Controller osztályt
  • A „public function __construct()” meghívja a CI_Controller osztály konstruktor metódusát és betölti az Opinion_poll_model modellünket.
  • A „public function index()…” az a függvény, amely az index.php-re képezi le. Ez a függvény a következőt használja: CodeAz Igniter bemeneti osztálya ellenőrzi, hogy beküldtek-e szavazatot, hozzáadja azt az adatbázishoz, majd megjeleníti az eredményeket. Ha az bemeneti osztály post tömbje üres, akkor betölti a szavazóoldalt.
  • „$this->input->post('…')” a következő: CodeIgniter bemeneti osztály, amely a $_POST globális változó tartalmát gyűjti össze.
  • A „$this->opinion_poll_model->add_vote($this->input->post('vote'))” meghívja a modell add_vote metódusát, hogy hozzáadja a szavazatot az adatbázishoz.

Nézeteink kialakítása

Emlékezzünk vissza az előző példára, hogy két HTML oldalunk volt, az egyik a szavazáshoz, a másik az eredményekhez. Ugyanezt a HTML kódot fogjuk használni minimális módosításokkal a nézetek létrehozásához. Hozza létre a következő fájlokat az application/views könyvtárban:

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>

Most hozzuk létre a results.php eredményoldalt

<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>

Alkalmazásunk tesztelése

Feltételezve, hogy az alkalmazás gyökérkönyvtára a ciopinionpoll, keresse meg a következőt: http://localhost/ciopinionpoll/

A közvélemény-kutatás szavazólapját a CodeGyújtó alkalmazás

A fenti szavazóoldal az opinion_poll_form nézetünkből származik. Kattintson az OK gombra választás nélkül, és a következő figyelmeztető üzenetet fogja látni.

Érvényesítési riasztási üzenet jelenik meg, ha nincs kiválasztva szavazat

Szavazz a kedvenc könyvtáradra, majd kattints az OK gombra. A következő eredményoldalt fogod látni.

Közvélemény-kutatási eredmények oldala, amely a szavazatok számát mutatja JavaSzkriptkönyvtár

Ez megerősíti, hogy a három réteg együttműködik: a vezérlő fogadta a szavazatot, a modell tárolta és megszámolta azt, a nézet pedig megjelenítette az összesítéseket.

GYIK

A HMVC (Hierarchical Model View Controller) egy alkalmazást független MVC triádokba szervez, amelyek meghívhatják egymást. Olyan keretrendszerek, mint a kohana népszerűsítette a HMVC-t, mivel segít a nagy alkalmazások modularizálásában.

Igen. Laravel jelenleg a legnépszerűbb PHP MVC keretrendszer. Ugyanazt a Model-View-Controller szétválasztást követi, amelyet itt ismertetünk, olyan eszközöket adva hozzá, mint az Eloquent ORM és a Blade sablonok.

Igen. Olyan eszközök, mint GitHub másodpilóta modelleket, vezérlőket és nézeteket állíthat össze promptokból. Továbbra is érdemes áttekinteni a generált kódot biztonsági problémák, például a nem escape-elt kimenet és az SQL-injektálás szempontjából.

Nem. A mesterséges intelligencia asszisztensek felgyorsítják a kódírást, de a keretrendszerek továbbra is biztosítják a tesztelt struktúrát, a biztonsági alapértelmezett értékeket és a konvenciókat, amelyek biztosítják az alkalmazások karbantarthatóságát. A kettő együtt működik a legjobban.

Nem. CodeGyújtó barátságos a korlátozott objektumorientált programozási tapasztalattal rendelkező fejlesztők számára. Az osztályok, metódusok és az alapvető öröklődés ismerete elegendő a modell és a vezérlőminták követéséhez.

Foglald össze ezt a bejegyzést a következőképpen: