Crearea unui cadru PHP5 - Partea 1

Cu site-urile din ce în ce mai dinamice și interactive, dezvoltatorii adesea caută cadre pentru a ajuta rapid la crearea site-urilor web și a aplicațiilor web. Deși există un număr mare de cadre disponibile, un cadru personalizat vă oferă posibilitatea de a personaliza cu ușurință cadranul de care aveți nevoie și de a construi cu el chiar și mai repede - după cum ați fi știut deja înainte și înainte de a lucra cu acesta. În această serie de tutoriale, vom construi propriul Cadru de Dezvoltare PHP5! Să începem cu planificarea cadrului nostru și să punem la punct structura de bază.

Pasul 1: Această serie

În această serie, vom crea propriul Cadru PHP5 de la zero. Cadrul va include funcții de bază de gestionare a conținutului și îl vom folosi pentru a construi un director web pentru o organizație mică.

Sperăm că, pe măsură ce vom merge mai departe, veți îmbunătăți, construi și optimiza acest cadru pentru a satisface nevoile dvs. mai bine, cu toate acestea, în aceste tutoriale vrem să obțineți un cadru simplu de funcționare și de funcționare și alimentarea unui site web.

În următoarele câteva săptămâni, în timpul acestor tutoriale vom acoperi:

  • Crearea unui handler de autentificare, a unui strat de abstractizare a bazei de date și a unui manager de șabloane
  • Aducerea acestor obiecte împreună
  • Folosind cadrul pentru a gestiona conținutul și a forța site-ul nostru
  • Crearea unui design fantastic.
  • Proiectarea procesului de conectare prin storyboarding
  • Cum poate fi extins și extins cadrul

Pasul 2: Modele de proiectare și utilizarea lor în cadrul nostru

Atunci când creați orice sistem mare bazat pe computer, fie ea o aplicație desktop, un sistem de rețea distribuită sau o aplicație web, întotdeauna vor exista provocări arhitecturale asociate implementării sale.

Modelele de proiectare abordează unele dintre aceste probleme comune și vom folosi un șir de modele de design pe măsură ce creăm Cadrul nostru, pentru a ne asigura că avem un cadru de calitate, flexibil, robust și ușor de utilizat, potrivit pentru orice scop! În special, în acest tutorial vom examina modelul Singleton și modelul Registry.

Pasul 3: Fișiere și foldere

Primul lucru pe care trebuie să-l începem să creăm Cadrul nostru este de a crea o structură adecvată a fișierelor, astfel încât totul să aibă loc. Pe lângă fișierele care alimentează cadrul, trebuie, de asemenea, să punem la dispoziție fișiere referitoare la site-ul pe care îl vom crea împreună cu cadrul nostru. Cele mai multe site-uri web și aplicații web au:

  • Unele funcții / obiecte utilizate în mod obișnuit.
  • Lociga afacerii.
  • Un design

Acest lucru ne oferă un punct de plecare mare, fișierele referitoare la fiecare dintre aceste trei categorii ar trebui grupate în secțiunea proprie. Aruncati o privire la structura directorului de mai jos, vom discuta despre motivele structurii.

Rețineți că dosarul .settings și fișierul .project au fost create de IDE-ul pe care îl folosesc și nu trebuie să fiu prezent în aplicația dvs.

Funcțiile și obiectele de bază, cum ar fi accesul la bază de date, autentificarea, manipularea șabloanelor, obiectele de trimitere a e-mailurilor, obiectele de parsing e-mail, ar trebui să fie stocate într-un director numit obiecte, în dosarul PCARegistry. Acest lucru ne permite să separăm logica de Registru (pe care o vom examina în scurt timp) de obiectele stocate în Registru.

Apoi, avem nevoie de undeva pentru a stoca logica noastră de afaceri, care este fișierele pe care le vom crea, care fac uz de cadrul nostru. Ar trebui să păstrăm aceste fișiere într-un folder numit controlori. Fiecare funcție importantă pe care site-ul Web sau o aplicație web o face (de exemplu, înregistrarea pe directorul de afaceri, furnizarea și gestionarea conținutului, furnizarea unei galerii de imagini etc.) ar fi un controler separat, stocat în dosarul propriu din dosarul controlorilor. Noi nu le vom folosi în acest tutorial, dar este important să avem structura noastră de directoare, așa că știm cum va funcționa.

Designul de site-uri și șabloanele ar trebui să fie stocate în folderul de skin-uri. Deoarece am putea dori desene sau modele diferite (fie ca utilizatorii aplicatiei / site-ului web pe care il creem cu frameworkul nostru sa poata alege dintr-un numar de desene sau sa schimbe design-ul in functie de sezon sau eveniment special), fiecare piele va fi continut in propriul folder.

Pasul 4: Registrul

În centrul cadrului nostru vom avea funcțiile de bază, cum ar fi accesul la baze de date, autentificarea utilizatorilor etc. Prin implementarea modelului de design al registrului, putem păstra aceste obiecte stocate la nivel central, în cadrul Registrului, ceea ce face ușor pentru Cadrul nostru și orice aplicații care utilizează cadrul nostru pentru a accesa.

Modelul de design al registrului stochează și preia referințele la obiecte și funcționează într-un mod similar unui telefon: stocarea și preluarea contactelor. Îl vom folosi pentru a stoca aceste obiecte de bază, setările la nivel de sistem și, ulterior, orice alte date sau informații care trebuie partajate în cadrul sistemului.

Deoarece stocăm aceste informații centralizate, dorim doar ca o singură instanță a acestui obiect de regiștri să fie disponibilă în cadrul nostru, dacă mai multe ar fi disponibile, atunci vom avea probleme în care ne așteptam la o anumită dată sau la o anumită obiect pentru a fi în registru, atunci când acesta a fost, de fapt, stocat într-o altă instanță a obiectului Registry. Pentru a rezolva această problemă, obiectul Registry va implementa modelul de design Singleton, care împiedică disponibilitatea a mai mult de o singură instanță a obiectului.

Mai jos este cod PHP pentru registry.class.php fișier, vom examina modul în care funcționează în curând.

Deci, cum funcționează obiectul Registry și cum păstrează obiectele stocate frumos?

  • Obiectele sunt stocate într-o matrice.
  • Când un obiect nou este stocat în Registru, fișierul de clasă este inclus, obiectul este instanțiat și apoi este stocat în matrice.
  • Obiectele sunt retrimise prin trecerea obiectelor "key" la metoda getObject.

Cum previne crearea unei alte copii a obiectului Registry?

  • Constructorul este privat, prevenind crearea directă a obiectului.
  • Clonarea obiectului declanșează o eroare.
  • Dacă avem nevoie să accesăm obiectul din Cadrul nostru și nu este direct disponibil pentru fișierul în care lucrăm, putem apela metoda singulară statică (PCARegistry :: singleton ()) pentru a obține instanța Registrului.

Pasul 5: index.php

Cu structura pusă la dispoziție pentru funcționalitatea de bază pe care o vom adăuga într-un tutorial suplimentar, să ne uităm la modul în care vom accesa Registrul și vom începe să lucrăm la punctul de acces unic al Cadrului nostru, fișierul index.php.

Adresele URL prietenoase sunt disponibile în mod uzual în toate formele de site-uri dinamice și aplicații web, iar una dintre cele mai simple moduri de a face acest lucru (și de a gestiona controlul informațiilor prin cadrul nostru) este de a asigura că toate solicitările paginilor noastre trec prin index.php fişier. Într-un tutorial mai târziu, vom crea un fișier .htaccess pentru a redirecționa cererile dintr-un format prietenos, într-un format pe care fișierul index.php îl poate înțelege.

Codul index.php este mai jos. În prezent nu face multe, dar ne permite să facem lucrurile la locul lor.

getFrameworkName (); Ieșire(); ?>

Deci ... ce face fișierul index.php în acest moment? Aceasta:

  • Cereți start_session imediat, pentru a ne asigura că putem folosi sesiuni în cadrul Cadrului (aceasta trebuie să fie apelată înainte orice producție.
  • Creează o definiție a căii curente a fișierului, astfel încât să putem face referire la directorul rădăcină de cadre din altă parte și creează o definiție pe care o vom folosi pentru a ne asigura că toate fișierele Cadru sunt chemați din Cadrul propriu-zis și că cineva nu este " încercați să apelați direct unul dintre fișiere
  • Utilizează funcția autoload pentru a determina unde pot fi localizate anumite clase. În acest caz, acesta indică directorul controlerelor, pentru că aici se va păstra logica noastră de afaceri.
  • Acesta include clasa de registry (acest lucru este necesar deoarece clasa nu se află în dosarul controlorilor unde ar fi găsită funcția autoload și se referă instanța Registry la variabila $ registry.
  • În cele din urmă, acesta imprimă numele cadrului, pentru a demonstra o funcție simplă din cadrul Registrului.

Putem vedea mai detaliat modul în care Registrul va funcționa în Cadrul nostru - prin crearea unor fișiere de clasă fictive pentru ca acesta să poată fi utilizat. Cu o clasă de șabloane într-un nou fișier template.class.php din dosarul PCARegsitry / objects, putem demonstra acest lucru prin adăugarea unui cod suplimentar la fișierul index.php.

Pe linia după ce am referit pentru prima dată $ registry, am putea adăuga:

$ Registry> storeObject ( 'șablon', 'șablon');

Dacă clasa noastră de șabloane a avut o metodă conținută în ea, cum ar fi generateOutput, am putea numi această metodă din index.php ca aceasta:

$ Registry> getObject ( 'template') -> generateOutput ();

Cadrul nostru are acum o structură de bază pentru acesta și avem un registru pentru funcționalitatea noastră de bază, în tutorialul următor vom analiza crearea obiectelor pe care le va stoca Registrul nostru, pornind de la un strat de bază de abstractizare a bazei de date și de securitate administrator.

Cod