Ionut Stoica

Programator PHP / Frontend developer / Pasionat de Electronica Auto
27Jun

Crearea unui CMS simplu OOP & MVC & Nice URL`s – Part 1

Prefata

Multi incepatori isi doresc sa-si creeze propriile situri “de la 0”. Acesta este un lucru foarte bun, DAR majoritatea tutorialelor pentru incepatori fie sunt banale fie prea avansate pentru acestia.
Deoarece tendinta web-ului este sa se indrepte spre MVC, in acest articol voi incerca sa explic modul de lucru al unei aplicatii MVC (Model-View-Controller).

Nu o sa stau sa explic teoria MVC, oricine poate sa caute informatii pe google.
Practic Modelul este Obiectul legat de baza de date (indiferent de tipul acesteia). In principiu contine functii de lucru cu baza de date (randuri, colectii de randuri, actiuni in grup pe un tabel in baza de date, etc).
Personal folosesc 2 clase principale pentru lucrul cu baza de date: Row.db.class.php si Collection.db.class.php. In primul fisier definesc toate functiile generice necesare pentru lucrul cu un RAND din tabel (ex: vizualizarea unei pagini, update-ul unui post in blog sau al unui comment). In collection am functiile generice pentru lucrul cu un array de randuri (Ex: Un obiect in care sa “scot” toti utilizatorii dintr-un grup sau sa scot produsele dupa o anumita categorie) sau stergerea unui grup de randuri (stergerea tuturor comenzilor unui client la stergerea contului. Bineinteles, asta este un exemplu absurd, dar ramane un exemplu).
Evident ca pentru fiecare tabel in parte am o clasa ce extinde aceste clase principale. In acea clasa pun doar functiile negenerice (cele pentru un singur tabel/un grup mic de tabele) Ex: getUsername() din tabelul Users, getPrice() din tabelul Produse, si exemplele pot continua la infinit) SAU functiile redefinite.

MVC

View-ul este acel modul care faciliteaza afisarea informatiilor pe ecranul utilizatorului. Tot view-ul se ocupa de managemetul temelor munui site. Daca aveati obiceiul sa codati spagetti style, uitati de el. Puneti bine fisierele actuale si uitati-va pe ele peste cativa ani. O sa vedeti progresul facut si probabil o sa radeti 😀

Controller-ul:
Ei bine, aici se intampla lucrurile cele mai interesante, Aici sunt procesate CERERILE ($_GET, $_POST), se apeleaza metodele (functiile) necesare PROCESARII informatiei primite si informatiile sunt trimise catre View pentru afisare sau catre Model pentru insert/update.

Action-ul:
Action-ul de fapt este parte integrata a controller-ului si de obicei este functia publica unde setam template-ul folosit pentru afisare, unde setam variabilele trimise spre View, etc. Cam toate framework-urile publice folosesc pentru action-uri nume generice gen: indexAction, actionIndex si doar acestea sunt apelate pe url-ul specificat.

Nice URL`s

Probabil ati mai folosit url rewrite, dar in cazul de fata il vom folosi intr-un mod ceva mai avansat si anume:
La un request serverul Apache verifica existenta FIZICA a acelui url(path) si daca nu exista request-ul este trimis direct la index.php
Prin folosirea nice URLs nu ne vom folosi de globalul $_GET si vom folosi o variabila din globalul $_SERVER din care vom extrage partile componente ale acestuia.
Asignarea cheie-valoare o facem simplu, printr-un loop in valorile gasite in care luam toate valorile pare ca si cheie si valoarea imediat urmatoarea ca si valoare. Ceva gen:

/* Initializam variabila ca array altfel
ne trezim cu erori in PHP5.4 */
$Parametrii = array();
// Luam fiecare valoare a url-ului si o procesam.
for($i=0; $i<count ($bucatiURL); $i++){
    /* Valorile impare ale lui $i sunt valori,
    noua ne trebuiesc doar cheile, deci trecem peste. */
    if(($i % 2) != 0) continue;
    // Vloarea cheii
    $Cheie = $bucatiURL[$i];
    // Valoarea imediat urmatoare
    $Valoare = $bucatiURL[$i + 1];
    // Asignam parametrii intr-un singur array sa putem lucra usor cu ei.
    $Parametrii[$Cheie] = $Valoare;
}

URL routing

In aplicatiile custom de obicei avem module distincte, in acest caz se impune folosirea unor metode de routing pentru a fi url-ul cat mai scurt.
Spre exemplu daca avem pagina situlmeu.com/modul-pagini/controller-index/actiune-vizualizare/produs/numeprodus, putem sa facem un routingpentru a apela aceiasi pagina dintr-un url gen situlmeu.com/produs/umeprodus, modelul, viewul si actionul fiind apelate automat prin rute.

Comments(0)

Leave a comment

Your email address will not be published.Field is required

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 Previous  All works Next