Noțiuni de bază cu tort PHP Partea 2

În ultimul nostru tutorial CakePHP am analizat crearea cadrului CakePHP și am introdus câteva dintre conceptele și terminologia de bază a cadrului. Acum ne îndreptăm spre ilustrarea mai multor capabilități de dezvoltare rapidă ale CakePHP folosind o aplicație personală de blog ca exemplu. În următorul set de tutoriale vom construi aplicația blogului în mod progresiv, astfel încât procesul de bază al dezvoltării CakePHP să fie prezentat în mod clar, în loc să fie menționat pe scurt, ca și în alte tutoriale similare. În acest tutorial începem cu o componentă de bază pentru autentificarea autorului pentru aplicația de blog de exemplu.

Pasul 1: Definirea unui obiectiv

Scopul nostru este de a crea componentele unei aplicații personale de blog. În momentul finalizării proiectului, vom adăuga efecte Web 2.0 și vom oferi integrare cu alte servicii pentru a finaliza aplicația. Înainte de a începe proiectul, trebuie să definim un plan de dezvoltare cu un fel de listă de caracteristici care să ne ghideze.

Iată o mică listă de caracteristici principale pe care le vom discuta și vom include în aplicația finalizată:

  • Sistem protejat, cu cel puțin capacități pentru un autor
  • Funcțiile de postare vor include funcții de comentare, vor oferi trackback-uri pe blog și vor permite includerea imaginilor și încărcărilor
  • Motorul de căutare full-text care utilizează Sphinx
  • Integrarea cu servicii externe, cum ar fi Gravatar și Askimet Spam Protection / Spam Management
  • Îmbunătățirile Javascript incluzând posibilitățile editorului WYSIWYG, Ajax Live Search, previzualizarea comentariilor Ajax, încărcarea rapidă Ajax Publish / Edit / Delete funcționalitatea și validarea formularului Ajax
  • Integrarea aplicației cu Facebook pentru a permite dezvoltarea rapidă a Facebook (obiectivele pentru această caracteristică includ trimiterea de postări la caracteristica feed-urilor de știri Facebook și tragerea datelor personale din API-ul Facebook pentru a face blogul un pic mai personal)

În articolul de astăzi ne vom concentra mai ales pe sistemul de management utilizator / autor deoarece este locul perfect pentru a învăța elementele de bază ale controlerului, modelului și codului de vizualizare. Odată ce învățăm aceste elemente de bază, le putem implementa mai târziu pentru celelalte componente ale sistemului mai mare.

Fără alte informații, hai să intrăm în CakePHP.

Pasul 2: Modele

După cum am menționat anterior, modelele interacționează cu baza de date a cadrului. Implicit, CakePHP vine cu un număr de metode integrate pentru a ne salva de la rescrierea codului pentru a implementa funcționalitatea comună. Împreună cu metodele de citire și scriere / salvare așteptate, puteți folosi și "metode magice" cum ar fi findBy care va găsi rânduri care se potrivesc cu un anumit câmp de interogare. Aceasta este o îmbunătățire reală față de utilizarea interogărilor tipice "SELECT * FROM".

Sistemul nostru de utilizatori pentru această iterație a aplicației va fi destul de fundamental. Deoarece scopul principal este un blog personal, vom avea un singur autor la un moment dat. Cu toate acestea, din motive de extensibilitate, vom stoca utilizatorul (utilizatorii) într-un tabel în cazul în care vom alege să dezvoltăm mai târziu un sistem complet de utilizator / permisiune sau dacă vrem să adăugăm manual mai mulți autori. Funcționalitatea de bază va permite conectarea, deconectarea și actualizarea informațiilor personale.

Vom face toate acestea cu o mică tabelă MySQL implementată de următoarea instrucțiune CREATE TABLE:

CREATE TABLE "autori '(' id 'int (11) NOT NULL auto_increment,' username 'varchar (255) NOT NULL implicit" implicit "," e-mail "varchar (255) NOT NULL implicit", "bio" text NOT NULL, KEY PRIMARY ('id'))

De asemenea, vom dori un cont de bază de bază, așa că vom introduce și un rând în timp ce suntem la el (numele de utilizator și parola pentru contul de pornire este test / test):

INSERT INTO 'autori' ('nume utilizator', 'parola', 'nume', 'email', 'bio') VALUES ('test', '098f6bcd4621d373cade4e832627b4f6', 'Test', '[email protected]' lume ... ');

Scopul structurii tabelului este următorul:

  • id vor fi utilizate pentru ID-ul unic de utilizator atunci când încărcăm profilul.
  • nume de utilizator va fi folosit pentru a vă conecta la zona de administrare.
  • parola va fi o parolă md5 hashed utilizată pentru conectarea la zona de administrare.
  • Nume vor fi folosite în herines și pagina autorului. Acesta este numele public afișat, deoarece numele de utilizator nu este afișat.
  • e-mail va fi utilizat pentru orice funcționalitate viitoare (cum ar fi notificarea comentariilor).
  • bio va fi folosit pentru a stoca informații biografice despre un autor (cum ar fi paginile autorului văzute aici pe NETTUTS).

Acum trebuie să creăm modelul. Pentru a face acest lucru, creați un fișier nou în / App / modele / dosarul numit author.php cu următoarele conținuturi:

autorul clasei extinde AppModel

var $ name = 'Autor';

?>

Modelul pentru această funcție este de fapt destul de fundamental. Deoarece funcționalitatea de care avem nevoie, cum ar fi findByUsername sau salvarea este deja acoperită de funcțiile din Model (care este extinsă de AppModel), am terminat cu partea modelului. Acest fișier pătură ne permite doar să interfatăm cu tabela autorului.

În secțiunile ulterioare, când începem să adăugăm funcționalitate post, este posibil să fie nevoie să extindem modelele.

Pasul 3: Vizualizări

Viziunile sunt în principal un amestec de coduri HTML și ajutoare. În alte sisteme am numi aceste șabloane. Ajutoarele generează un cod comun sau pot ajuta cu sarcini comune. Unele tipuri de helper găsite în CakePHP sunt ajutorul HTML și Ajutoarele de Paginare.

Pentru a stabili vizualizări, creați un folder în / App / opinii / denumit autori / astfel încât să putem stoca toate opiniile noastre. Prima noastră viziune ar trebui să fie chemată login.thtml cu următoarele conținuturi:

 

Eroare

Numele de utilizator și parola nu se potrivesc. Încercați din nou și verificați din nou informațiile introduse.

formTag ( '/ autori / conectare /'); ?> de intrare ( 'Autor / nume de utilizator'); ?> parola ( 'Autor / parola'); ?>
submit ( "Autentificare"); ?>

În loc de a folosi etichetele folosim unul dintre ajutoare pentru a genera câmpuri de intrare valide care pot fi folosite în controlerele noastre. De asemenea, verificăm eroarea de eroare în partea de sus a șablonului în cazul în care utilizatorul introduce un nume de utilizator sau o parolă greșită. Variabila de eroare este setată mai târziu în controler.

Acum că prima noastră acțiune are un șablon în spatele ei, putem trece la ceilalți.

Deconectarea de fapt nu are nevoie de o vizualizare proprie, deoarece vom redirecționa utilizatorii înapoi la pagina de index a blogului și vom afișa un mesaj de succes rapid. Actualizarea informațiilor despre profil în gestionarea utilizatorilor are nevoie de un formular, cu toate acestea, așa că va trebui să scriem o viziune pentru asta.

Creați un șablon numit manage.thtml cu următoarele conținuturi:

 

Eroare

Asigurați-vă că toate informațiile necesare au fost completate.

formTag ( '/ autori / gestionarea /'); ?> de intrare ( 'Autor / numele'); ?>
de intrare ( 'Autor / e-mail'); ?>
textarea ('Autor / bio', matrice ('cols' => '60', 'rows' => '10')); ?>
submit ( "Update"); ?>

Această vizualizare este foarte asemănătoare cu formularul nostru de conectare, cu excepția faptului că gestionăm câteva câmpuri diferite și vom include o altă metodă de ajutor ($ html-> textarea) pentru a genera o zonă de text.

Grozav! Acum, când setul nostru mic de opinii este scris, putem trece la controlori.

Pasul 4: Controlere

Controlorii acționează ca directorii de trafic. Ei acceptă intrarea, decid ce să facă cu ea și apoi oferă instrucțiuni de manipulare pentru restul sistemului. Acestea sunt inima aplicației, deoarece iau datele din modele și le transmit pe afișajele corecte pentru afișare.

Această secțiune se referă în mod specific la setarea și citirea unei sesiuni, precum și la actualizarea bazei de date. Vom crea, de asemenea, un controler "părinte" de la care toți viitorii controleri vor moșteni.

Mai întâi creați un fișier în app / controlere / numit authors_controller.php. Acum vom trece prin cod pas cu pas.

redirecționare ("/ ');  funcția de conectare () $ this-> set ('error', false); dacă ! empty ($ this-> data)) $ author = $ this-> Author-> findByUsername ($ this-> data ['Autor'] ['username']); dacă (! empty ($ autor ['Autor'] ['parola']) && $ autor ['Autor'] ['parola'] == md5 ($ this-> data [' )) $ this-> Session-> write ('Autor', $ author ['Autor']); $ this-> redirect ('/');  altceva $ this-> set ('error', true); 

Funcția noastră de indexare este destul de fundamentală. Pentru moment, vom redirecționa doar la indexul de script folosind o funcție CakePHP încorporată numită "redirecționare".

Funcția noastră de conectare este puțin mai avansată. Mai întâi setăm variabila de eroare la falsă pentru a opri PHP să nu mai arunce înapoi o notificare variabilă nedefinită. Apoi facem un cec pentru a vedea dacă s-au trimis date. "$ this-> data" deține toate datele de intrare din formularul de autentificare și este disponibil în formatul $ this-> data ['CONTROLLER'] ['FIELD']. Acum vedem metoda noastră magică "findByUsername". folosit pentru a găsi orice rânduri care conțin numele de utilizator al utilizatorului care tocmai a fost conectat. Dacă avem o potrivire între utilizatori, vom compara parolele și vom scrie o sesiune cu ajutorul programatorului de sesiuni al CakePHP. Dacă există o problemă, setăm "eroare" la adevărat, astfel încât vizualizarea noastră poate gestiona mesajul. Un sistem de conectare nu poate fi mult mai simplu decât acesta!

 funcția logout () $ this-> Session-> delete ("Autor"); $ this-> flash ('Ai fost deconectat', '/');  

Funcția de deconectare este chiar mai simplă. Utilizăm clasa de sesiuni a CakePHP pentru a șterge total sesiunea și apoi folosim metoda "flash" pentru redirecționare. Metoda flash este un pic diferită de metoda de redirecționare, deoarece suntem autorizați să trimitem un mesaj înapoi pe ecran. Acest lucru devine util deoarece putem permite utilizatorilor să știe că sa întâmplat ceva.

Notă: deoarece suntem încă în modul de dezvoltare, ecranul flash nu va fi redirecționat automat. Trebuie să faceți clic pe text pentru a accesa ecranul. Când suntem în modul de producție, acest ecran ar fi redirecționat pentru noi.

 funcția gestionare () $ this-> set ('error', false); dacă (gol ($ this-> data)) $ this-> Autor-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Autor-> citiți ();  altceva if (gol ($ this-> data ['Autor'] ['name']) || empty ($ this-> data ['Autor' > date ['Autor'] ['bio'])) $ this-> set ('eroare', adevărat); $ this-> Autor-> id = $ this-> Session-> read ('Autor.id'); $ this-> data = $ this-> Autor-> citiți ();  altceva $ this-> Autor-> id = $ this-> Session-> read ('Author.id'); dacă ($ this-> Author-> save ($ this-> data ['Autor'])) $ this-> flash ('Informațiile contului dvs. au fost actualizate', '/ authors / manage /');  

Funcția noastră cea mai avansată pentru acest controler este administra funcţie. Multe funcționalități sunt implementate folosind tehnicile pe care tocmai le-am introdus. Un lucru de observat în această funcție este setarea variabilei $ this-> author-> id înainte de salvare și citire. Acest lucru spune modelului care rând să se ocupe de așa ceva încât să nu încerce să salveze sau să insereze un întreg nou rând. Ne ocupăm, de asemenea, cu mai multe funcții de sesiune prin citirea id-ului de la hash.

Ultimul pas este să protejăm pagina de gestionare. Vrem doar ca utilizatorii conectați să vadă această pagină și putem oferi protecție cu o simplă funcție de verificare. Aceasta este o bucată de funcționalitate de care avem nevoie, de asemenea, pentru ecrane viitoare, deci ar trebui să o stocăm într-un loc comun. Așa cum am menționat mai sus, toți controlorii CakePHP moștenesc de la un controler numit "AppController", care acum este un dosar gol așezat în tort Director ...

Vom crea un AppController specific aplicației creând un fișier numit "app_controller.php" în app / și introduceți următorul conținut:

Session-> check ("Autor")) $ this-> flash ('Trebuie să fiți conectat pentru a face asta', '/ authors / login'); Ieșire; ?> 

Pur și simplu verificăm sesiunea și, dacă nu este acolo, trimitem utilizatorul la ecranul de conectare. Această funcție poate fi utilizată în orice metodă de control.

Ultimul nostru pas este de a apela funcția de la funcția noastră de gestionare. Ne deschidem app / controler / authors_controller.php fișier și găsiți:

 funcția gestionare () $ this-> set ('error', false);

si adauga

$ This-> isLoggedIn ();

chiar sub ea.

Pasul: Testați-l

Acțiunile pot fi testate și accesate cu următoarele adrese URL:

  • http: //yoursite.tld/autori / autentificare /
  • http: //yoursite.tld/autori / gestiona /
  • http: //yoursite.tld/autori / logout /

Numele de utilizator al contului este testat și parola este testată.

Închidere

Acest articol a fost destinat introducerii unor funcții de bază ale CakePHP cu exemple în contextul construirii unei aplicații personale de blog. Am început cu o anumită funcționalitate a paginii utilizator / autor pentru a introduce conceptele de bază ale dezvoltării aplicațiilor cu CakePHP înainte de a ne mișca (în tutorialul următor) pentru scrierea controlorului de post. În acest fel, vom înțelege mai bine cum se potrivește totul în cadru. Avem încă un drum lung de parcurs înainte ca aplicația noastră de blog să fie completă, așa că pregătește-te să vă aruncați cu adânc în CakePHP pentru a putea obține toată funcția de postare și comentare a blogului care lucrează data viitoare!

Cod