Cum să scrieți propriul cadru php

În posturile anterioare, am dezvoltat structura minimă a cadrului. În acest articol, vom pune un pic de luciu - vom adăuga o temă simplă cu bootstrap, un meniu și vom examina mai atent lucrul motorului șablon și al routerului (ruterul site-ului).







În ultimul articol am creat un router. care utilizează logica expresiilor regulate pentru a recunoaște legătura sef de intrare și o trimite la controlerul dorit și la metoda sa.

Ie de la o astfel de linie

router-ul face o matrice

Nu am scris un exemplu de utilizare ultima dată a acestei soluții. Să rezolvăm situația, dar înainte de aceasta vom termina routerul.

Transferați matricea regulilor de ruter la fișierul de configurare al cadrului. Această matrice va fi ocupată de dezvoltatori care vor scrie site-uri în cadrul nostru. Prin urmare, ar trebui să fie cât mai accesibil posibil.

În plus, puteți vedea că am schimbat partea dreaptă a matricei.

Vom face schimbări în codul routerului. și apoi vom analiza lucrarea sa.

În primul rând, vom umple matricea datelor de ieșire cu valorile implicite, pe care le luăm din config.php. Apoi analizăm calea de intrare $ pentru prezența variabilelor get. Dacă sunt, trebuie pur și simplu adăugate la matricea de date de ieșire. parse_url - separă URL-ul în componentele sale. O astfel de componentă este interogare. Acesta este totul în care adresa URL merge după semnul întrebării

Această linie a parametrilor key = value parșează parse funcția parse_str

C interogare parte a șirul dat afară, folosind acum regulile de expresii regulate, selectați datele necesare din calea.

Pe linia 12, vedem o căutare a tuturor regulilor din config. La 13, verificăm dacă regula următoare este potrivită. Dacă da, luăm o serie de rezultate și alternativ îl înlocuim cu elemente - partea dreaptă a regulii.

Regula "([a-z0-9 + _ \ -] +) / ([a-z0-9 + _ \ -] +) / ([0-9] +) / $ id ',

Apoi, matricea rezultatelor aplicării părții sale stângi la linia de intrare / utilizator / profil / 15 va fi o matrice

După pornirea acestei matrice, începând cu al doilea element, înlocuiți tastele $ ([a-z] +) din partea dreaptă a regulii $ controller / $ action / $ id

Ie pe linia 14, cu fiecare înlocuire, partea dreaptă a regulii se va schimba astfel

La prima vedere, acestea sunt acțiuni fără sens. Ce linie a fost pornită la intrarea / user / profile / 15 și aceasta a fost regula

Dar aceasta este doar la prima vedere. La ieșire, avem un URI standardizat, aplicând operația explode la acesta, obținem numele controlerului în primul element, în al doilea element al metodei, în id-id

Pentru mai multă claritate, adăugați sfârșitul matricei de reguli în config.php, regula

Ca urmare a acestei reguli, ruterul nostru, cum ar fi solicitarea unei pagini html (de exemplu /about.html fără a specifica un controler și o metodă), va trimite controlerului de pagină și metoda de citire, iar parametrul despre acesta va trece șirul despre

Folosim acest lucru pentru a crea un exemplu de blog pe baza cadrului nostru. Cu toate acestea, mai întâi, am îmbunătățit motorul șablon

templating

Pentru a începe crearea unui șablon pentru cadrul nostru, avem nevoie de un fel de pagină html. De exemplu, alegeți o temă gratuită de pe site-ul bootzrapa







Apăsați ctrl + u în browserul dvs. și copiați pur și simplu întregul cod sursă în fișierul viws / main.php - acesta este șablonul. Dar trebuie încă să fie finalizată. Eliminați toate stilurile de conectare și scripturile prin intermediul marcajului html. Vom conecta script-urile necesare prin php. Acest lucru oferă o anumită certitudine că în orice șablon va exista întotdeauna un set de fișiere din cadrul dvs., indiferent dacă acestea au fost folosite de designerul de layout atunci când faceți planul.

Pentru stiluri și scripturi din rădăcina proiectului, creați un folder separat. De obicei se numește bunuri. și în subfoldere - css - pentru stiluri, js - pentru scripturi și imagini - pentru imagini. În acest caz, ultimul dosar ar trebui să fie utilizat numai pentru acele imagini care participă la proiectarea site-ului, și nu în conținutul acestuia. Pentru completare, este mai bine să alocați un director separat - media / imagini în rădăcina site-ului.

Descărcați bootstrap-ul proaspăt și cea mai recentă versiune de jquery. Le-am pus în folderul assets / js / libs /. Restul stilurilor tematice va trebui să vă descărcați singur.

Toate stilurile și scripturile sunt în dosarele lor, dar cum să le conectați. În șablonul nostru nu există astfel de metode. Trebuie să fie scrise. Le vom adăuga la fișierul ideal / classes / controller.php. Adăugăm următoarele metode

  • funcția privată addAsset ($ link, $ where = 'cap', $ asset = 'script', $ type = 'url')
  • funcția publică funcțională addScript ($ link, $ where = 'head')
  • funcția publică addStyleSheet ($ link, $ where = 'head')
  • funcția publică addScriptDeclaration ($ link, $ where = 'head')
  • funcția publică addStyleSheetDeclaration ($ link, $ where = 'head')

Va trebui să scriem cod pentru metoda addAsset, toate celelalte metode fiind un apel pentru addAsset cu parametri diferiți și sunt făcuți pentru comoditate.

Adăugați următorul câmp în clasă

Acesta va stoca date despre toate stilurile și scripturile plug-in-uri. Apoi adăugațiAsset

$ hash - se calculează numai pentru a nu se conecta la pagină cu aceleași scripturi de două ori. $ unde este locul unde conectăm scenariile. înainte sau înainte și anume începutul sau sfârșitul documentului.

Apoi, metodele în ordine

Metoda addAsset umple numai matricea $ cu date, dar aceste date trebuie încă aplicate. Prin urmare, rescriim metoda de redare. Anterior, el a derivat main.php de la noi. Acest lucru nu este complet corect. Să facem o altă metodă renderingPage în acest scop

Metoda care utilizează datele din active generează tag-urile de conectare a script-ului (fie un fișier la distanță sau inline) și le adaugă la locul potrivit din document

Metoda va fi apelată în interiorul metodei de pornire a clasei App, după ce controlerul pornește și rulează.

Metoda de pornire de la ideal / classes / App.php

Aici am folosit router-ul nostru recent, care a atribuit rezultatul muncii sale domeniului uri. Acum, oriunde în cadrul nostru, puteți obține următoarele informații

  • App :: gi () -> uri-> controler - numele controlerului
  • App :: gi () -> uri-> action - numele metodei controlerului
  • App :: gi () -> uri-> id - un anumit identificator

Și orice alte variabile de interogare vor fi de asemenea livrate prin acest câmp. Aceasta poate fi utilizată, de exemplu, pentru a determina elementul de meniu activ.

Apoi, combinația familiară ob_start - apelul la metoda controlerului - ob_get_clean și rezultatul operării controlerului, este trecut la renderPage

De asemenea, trebuie să observați conectarea unor scripturi și stiluri pe liniile 10 până la 19. Acestea sunt stilurile externe și scripturile care vor fi conectate prin config.php. Și acest lucru este făcut pur și simplu pentru confortul utilizării cadrului. De exemplu, putem face o conexiune la jquery și bootstrap "în paranteze" în config.php și se vor conecta la oricare dintre subiectele noastre, la orice pagină generată de cadrul nostru. Convenabil, nu crezi?

Având în vedere structura de director pe care am organizat-o mai sus, în config.php vom adăuga următoarele două tablouri

Deoarece cadrul a luat deja un aspect decent, îl puteți pune pe afișul public. Acum îi puteți vedea lucrarea aici.

Pagina de control

Când am adăugat o nouă regulă în ruterul nostru, am menționat un controler de pagină și metoda de citire a acestuia. Este destul de simplu, creați-l în folderul application / controllers / PageController.php

În același loc, creăm un alt dosar / pagină / pagini. și paginile necesare în el. De exemplu, about.php

Codul sursă al vizualizării și descărcării cadru finale

Cum să dezvoltați un cadru







Articole similare

Trimiteți-le prietenilor: