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.
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 |
|---|---|
|
|
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;
|
|
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: |
|
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; |
|
|
Ez egy erőteljes keret;
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:
A Zend keretrendszert használó vállalatok többek között:
|
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/
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
- Á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 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.
Szavazz a kedvenc könyvtáradra, majd kattints az OK gombra. A következő eredményoldalt fogod látni.
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.









