Tutorial PHP MVC Framework
โก Rezumat inteligent
Designul framework-ului PHP MVC separฤ datele aplicaศiei ศi logica de business de prezentare, utilizรขnd modele, vizualizฤri ศi controlere. CodeIgniter face acest model practic, permiศรขnd dezvoltatorilor PHP sฤ construiascฤ mai rapid aplicaศii web sigure ศi uศor de รฎntreศinut.

Ce este cadrul PHP MVC?
PHP MVC este un model de proiectare a aplicaศiei care separฤ datele aplicaศiei ศi logica de afaceri (modelul) de prezentare (vizualizare). MVC รฎnseamnฤ Model, View & Controller.
Controlerul mediazฤ รฎntre modele ศi vederi.
Gรขndiศi-vฤ la modelul de design MVC ca la o maศinฤ ศi la ศofer.
Maศina are parbrize (vizualizare) pe care ศoferul (controlorul) le foloseศte pentru a monitoriza traficul din faศฤ, apoi accelereazฤ sau frรขneazฤ (modelul) รฎn funcศie de ceea ce vede รฎn faศฤ.
รn continuare, sฤ vedem de ce meritฤ utilizat un framework construit pe acest model.
De ce sฤ folosiศi PHP MVC Framework?
Framework-urile PHP MVC simplificฤ lucrul cu tehnologii complexe prin:
- Ascunderea tuturor detaliilor complexe de implementare
- Furnizarea de metode standard pe care le putem folosi pentru a construi aplicaศiile noastre
- Creศterea productivitฤศii dezvoltatorilor, deoarece implementฤrile de bazฤ ale unor activitฤศi precum conectarea la baza de date ศi curฤศarea datelor introduse de utilizatori sunt deja parศial implementate
- รncurajarea respectฤrii standardelor profesionale de codare
Model de proiectare PHP MVC
Sฤ discutฤm acum pe scurt fiecare componentฤ a modelului de proiectare MVC.
Model โ aceastฤ parte se referฤ la logica afacerii ศi datele aplicaศiei. Poate fi folosit pentru a efectua validฤri de date, a procesa date ศi a le stoca. Datele pot proveni de la;
- fiศier plat
- Baza de date
- document XML
- Alte surse de date valide.
operator de date cu caracter personal, โ aceasta este partea care se ocupฤ de cererile utilizatorului pentru resurse de la server.
De exemplu, atunci cรขnd utilizatorul solicitฤ URL โฆ/index.php?products=list, controlerul va รฎncฤrca modelul de produse pentru a recupera datele despre produse, apoi va afiศa rezultatele รฎn vizualizarea listฤ.
Pe scurt, controlerul leagฤ modelele ศi vederile รฎmpreunฤ รฎn funcศie de resursele solicitate.
Vizualizฤri โ aceastฤ parte se ocupฤ de prezentarea datelor cฤtre utilizator. Aceasta se face de obicei sub formฤ de pagini HTML.
Tipuri de framework PHP MVC
Selectarea celui mai bun cadru PHP este o provocare.
Nu trebuie sฤ vฤ scrieศi propriul cadru pentru a beneficia de avantajele MVC.
Ar trebui sฤ รฎncercaศi sฤ vฤ creaศi propriul design de aplicaศie legat de MVC pentru a รฎnศelege cum funcศioneazฤ cadrele MVC.
Odatฤ ce vฤ simศiศi confortabil cu modul รฎn care funcศioneazฤ cadrele MVC, ar trebui sฤ treceศi la cadrele mature ศi deja testate.
Tabelul de mai jos descrie pe scurt cรขteva dintre framework-urile PHP populare ศi caracteristicile pe care le oferฤ fiecare framework.
| Cadru | Descriere |
|---|---|
|
|
Este unul dintre cele mai populare framework-uri PHP MVC, acum la a patra versiune majorฤ (CodeIgniter 4). Este uศor ศi are o curbฤ de รฎnvฤศare scurtฤ. Are un set bogat de biblioteci care ajutฤ la construirea rapidฤ a site-urilor web ศi a aplicaศiilor. De asemenea, รฎl pot folosi utilizatorii cu cunoศtinศe limitate de programare OOP. Aplicaศiile construite cu CodeAprinzฤtorul include;
|
|
Este un framework uศor ศi sigur, de tip Hierarchical Model View Controller (HMVC). Notฤ: Kohana a fost oficial รฎntrerupt รฎn 2017; ultima sa versiune stabilฤ a fost 3.3.6 (iulie 2016). Furca comunitarฤ Koseven ศi-a continuat baza de cod. Companiile care au folosit Kohana includ: |
|
Este modelat dupฤ Ruby on Rails ศi este รฎntreศinut activ (versiunea 5.x). Este cunoscut pentru concepte precum modele de proiectare software, convenศii asupra configurฤrii, ActiveRecord etc. CakePHP aplicaศiile alimentate includ; |
|
|
Este un cadru puternic care este;
Este ideal pentru dezvoltareping aplicaศii de business. รn 2020, Zend Framework a trecut la proiectul open source Laminas. Aplicaศiile bazate pe Zend/Laminas includ:
Companiile care au utilizat framework-ul Zend includ:
|
Framework-ul PHP MVC vs. PHP simplu: Diferenศe cheie
Ce schimbฤ de fapt un framework รฎn practicฤ? PHP-ul simplu รฎศi oferฤ libertate completฤ, dar fiecare proiect ajunge sฤ reinventeze rutarea, validarea ศi accesul la baza de date de la zero. Un framework PHP MVC standardizeazฤ aceste sarcini repetitive, astfel รฎncรขt codul tฤu rฤmรขne consistent รฎn toate proiectele ศi echipele.
| Aspect | PHP simplu | Framework-ul PHP MVC |
|---|---|---|
| Code organizaศie | HTML, SQL ศi logicฤ mixte รฎn fiศiere individuale | Separat รฎn modele, vizualizฤri ศi controlere |
| Acces la baza de date | Interogฤri scrise de mรขnฤ pe fiecare paginฤ | Constructor de interogฤri รฎncorporat sau ORM cu legare de parametri |
| Securitate | Dezvoltatorul trebuie sฤ ศinฤ cont de fiecare mฤsurฤ de siguranศฤ | Filtrare de intrare, protecศie XSS ศi CSRF incluse |
| Mentenanศฤ | Modificฤrile se propagฤ imprevizibil prin fiศiere | Fiecare strat se poate schimba independent |
๐ Sfat: Construieศte mai รฎntรขi un mic proiect PHP simplu, precum sondajul de opinie de mai jos; dificultฤศile aduse de codul mixt fac evidentฤ valoarea separฤrii MVC.
Portarea aplicaศiei de sondaje de opinie cฤtre Codeigniter
รn acest tutorial, am creat o aplicaศie de sondaje PHP. Aici, vom porta codul respectiv la Codeigniter
- Descฤrcare ultima versiune de CodeAprinzฤtor de la al lor site-ul web.
- ExtracTransferaศi conศinutul fiศierului arhivat รฎn directorul de dezvoltare din directorul serverului web. Vom folosi ciopinionpoll ca nume de folder รฎn aceastฤ lecศie.
- Navigaศi la URL http://localhost/ciopinionpoll/
CodePagina de bun venit a Igniter de mai sus confirmฤ cฤ framework-ul este instalat corect. Acum vom porta aplicaศia noastrฤ de sondaje de opinie la CodeIgniter. Reamintim cฤ aplicaศia noastrฤ a fost รฎmpฤrศitฤ รฎn trei componente majore, ศi anume;
- Controler frontal โ aceasta este partea care rฤspunde la URL solicitฤ ศi returneazฤ pagina solicitatฤ. Acest cod va intra รฎn controler
- Model โ acesta este codul care rฤspunde la solicitฤrile de date ศi returneazฤ datele solicitate. Acest cod va fi introdus รฎn model
- Vizualizฤri โ acesta este codul responsabil pentru formatarea ศi afiศarea datelor. Acest cod va intra รฎn vizualizare
Setฤri de configurare a bazei de date
Pentru a configura conexiunea la baza de date:
- Navigaศi la folderul ciopinionpoll
- Deschideศi baza de date.php fiศierul situat รฎn directorul application/config.
- Localizaศi urmฤtoarele linii de cod
- Setaศi numele de utilizator la root
- Setaศi parola la parola de root localhost
- Setaศi numele bazei de date la opinion_poll. Reศineศi cฤ vom folosi baza de date creatฤ รฎn lecศia anterioarฤ.
- Salvaศi modificฤrile ศi รฎnchideศi fiศierul.
Crearea modelului nostru
รn continuare, vom crea modelul nostru care va extinde CI_Model. CI_Model face parte din CodeBibliotecile Igniter. Modelul va fi localizat รฎn application/models opinie_sondaj_model.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);
}
}
?>
AICI,
- โclasa Opinion_poll_model extinde CI_Model...โ este modelul nostru care extinde CI_Model
- โparent::__construct();โ apeleazฤ constructorul CI_Model
- โ$this->load->database();โ รฎncarcฤ biblioteca bazei de date, astfel รฎncรขt aplicaศia noastrฤ sฤ poatฤ interacศiona cu baza de date
- โ$this->db->โ este Codeรnregistrarea activฤ a lui Igniter. Verificaศi asta. legฤturฤ pentru mai multe informaศii despre รฎnregistrarea activฤ.
Crearea controlerului nostru
Sฤ creฤm acum controlerul. Vom folosi setฤrile implicite CodeControlerul Igniter se aflฤ รฎn application/controllers/welcome.php. รnlocuiศi codul sฤu sursฤ cu urmฤtorul cod.
<?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 */
?>
AICI,
- โif (!defined('BASEPATH')) exit('Nu este permis accesul direct la script');โ se asigurฤ cฤ utilizatorii nu acceseazฤ direct clasa de controler
- โclasa Bun venit extinde CI_Controller...โ controlerul nostru extinde clasa CI_Controller
- โpublic function __construct()โ apeleazฤ metoda constructorului de clasฤ a CI_Controller ศi รฎncarcฤ modelul nostru Opinion_poll_model
- โpublic function index()โฆโ este funcศia care se mapeazฤ la index.php. Aceasta foloseศte CodeClasa de intrare a Igniter verificฤ dacฤ un vot a fost trimis, รฎl adaugฤ รฎn baza de date ศi apoi afiศeazฤ rezultatele. Dacฤ matricea post a clasei de intrare este goalฤ, รฎncarcฤ pagina de vot.
- โ$this->input->post('โฆ')โ este CodeClasa de intrare Igniter care preia conศinutul variabilei globale $_POST.
- โ$this->opinion_poll_model->add_vote($this->input->post('vote'))โ apeleazฤ metoda add_vote a modelului pentru a adฤuga votul รฎn baza de date.
Crearea vederilor noastre
Reamintim din exemplul anterior cฤ aveam douฤ pagini HTML, una pentru vot ศi cealaltฤ pentru rezultate. Vom folosi acelaศi cod HTML cu modificฤri minime pentru a crea view-urile noastre. Creaศi urmฤtoarele fiศiere รฎn directorul 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>
Sฤ creฤm acum pagina de rezultate 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>
Testarea aplicaศiei noastre
Presupunรขnd cฤ directorul rฤdฤcinฤ al aplicaศiei dvs. este ciopinionpoll, navigaศi la http://localhost/ciopinionpoll/
Pagina de vot de mai sus provine din vizualizarea noastrฤ opinion_poll_form. Faceศi clic pe OK fฤrฤ a selecta o opศiune ศi veศi vedea urmฤtorul mesaj de alertฤ.
Votaศi pentru biblioteca preferatฤ, apoi faceศi clic pe OK. Veศi vedea urmฤtoarea paginฤ cu rezultate
Aceasta confirmฤ cฤ cele trei straturi funcศioneazฤ รฎmpreunฤ: controlerul a primit votul, modelul l-a stocat ศi l-a numฤrat, iar vizualizarea a afiศat totalurile.








