Vizualizarea obișnuită a deconectării HTML. Vizualizări Conectați-vă și deconectați-vă. Creați pagina principală
Puteți să auziți chiar despre șabloane de design și chiar și prindeți aceste cărți minunate:
- E. Gamma, R. Helm, R. Johnson, J. Wlissidess "ia de design orientat pe obiecte. Modele de design ";
- M. Fowler "Arhitectura aplicațiilor software corporative".
Articolul prezentat va fi util în primul rând de novice. În orice caz, sper că în câteva ore puteți obține o idee despre implementarea modelului MVC, care se află în centrul tuturor cadrelor web moderne și, de asemenea, să obțină "alimente" pentru o reflecție suplimentară față de " cum se face". La sfârșitul articolului, o selecție de legături utile, care va contribui, de asemenea, la a afla ce este alcătuit (în plus față de MVC) și modul în care funcționează.
Programatorii PHP situați este puțin probabil să găsească ceva nou în acest articol pentru ei înșiși, dar comentariile și comentariile lor la textul principal ar fi foarte mult! pentru că Fără teorie, practica este imposibilă și fără practică teoria este inutilă, va fi mai întâi o teorie mică și apoi ne întoarcem la practică. Dacă sunteți deja familiarizat cu conceptul MVC, puteți sări peste secțiunea cu teoria și mergeți imediat la practică.
1. Teoria
Șablonul MVC descrie o modalitate ușoară de a construi o structură de aplicare, a cărei ramură logică de afaceri de la interfața cu utilizatorul. Ca urmare, cererea este mai ușoară decât cea scalată, este testată, însoțită și, desigur, implementată.Luați în considerare diagrama de șablon MVC conceptual (în opinia mea - aceasta este cea mai de succes schemă a celor pe care le-am văzut):
În arhitectura MVC, modelul oferă reguli de date și logică de afaceri, prezentarea este responsabilă pentru interfața cu utilizatorul, iar controlerul oferă interacțiune între model și reprezentare.
Secvența de aplicare tipică MVC poate fi descrisă după cum urmează:
- Când utilizatorul ajunge la resursa web, scriptul de inițializare creează o instanță a aplicației și îl pornește pentru a executa.
Aceasta afișează aspectul, spuneți pagina principală a site-ului. - Aplicația primește o solicitare de la utilizator și determină controlerul și acțiunea solicitată. În cazul paginii principale, se efectuează acțiunea implicită ( index).
- Aplicația creează o instanță a controlerului și începe metoda de acțiune,
În care, de exemplu, conține apeluri model care citi informații din baza de date. - După aceasta, acțiunea generează o prezentare cu datele obținute din model și afișează rezultatul utilizatorului.
Modelul nu trebuie să interacționeze direct cu utilizatorul. Toate variabilele legate de solicitarea utilizatorului trebuie să fie procesate în controler.
Modelul nu ar trebui să genereze un cod HTML sau un alt cod de afișare care poate varia în funcție de nevoile utilizatorului. Un astfel de cod ar trebui să fie procesat în specie.
Același model, de exemplu, modelul de autentificare a utilizatorului poate fi utilizat atât în \u200b\u200butilizator, cât și în partea administrativă a cererii. În acest caz, puteți face un cod general într-o clasă separată și ați moștenit de la acesta, determinând în metodele specifice moștenite.
Vedere - Folosit pentru a specifica afișarea externă a datelor obținute de la controler și model.
Tipurile conțin marcaj HTML și inserții de cod PHP mici la bypass, formatare și afișare a datelor.
Nu accesați direct baza de date. Acest lucru ar trebui să facă modele.
Nu lucrați cu datele obținute de la solicitarea utilizatorului. Această sarcină trebuie efectuată de către controler.
Acesta poate accesa direct proprietățile și metodele controlerului sau modelelor pentru a obține date gata la linie.
Tipurile sunt de obicei separate printr-un șablon comun care conține marcaj, comun tuturor paginilor (de exemplu, un capac și subsol) și o parte a șablonului care este utilizat pentru a afișa date din ieșirea modelului sau afișarea formularelor de introducere a datelor.
Controlor - Binder Link Conectarea modelelor, tipurile și alte componente din aplicația de lucru. Controlerul este responsabil pentru manipularea cererilor de utilizator. Controlerul nu trebuie să conțină interogări SQL. Este mai bine să le păstrați în modele. Controlerul nu trebuie să conțină HTML și alte marcaje. Merită la specii.
Într-o aplicație MVC bine concepută, controlorii sunt de obicei foarte subțiri și conțin doar câteva linii de cod de cod. Ce, nu puteți spune despre controlorii de grăsimi stupide (SFC) în CMS Joomla. Logica controlerului este destul de tipică și partea sa mare se face în clasele de bază.
Modele, dimpotrivă, foarte groase și conțin cea mai mare parte a codului asociat prelucrării datelor, deoarece Structura de date și logica de afaceri conținute în ele sunt de obicei destul de specifice unei aplicații specifice.
1.1. Controlerul frontal și controlerul de pagini
În cele mai multe cazuri, interacțiunea utilizatorului cu aplicația web trece prin link-uri prin referință. Uită-te acum la bara de adrese a browserului - pe acest link ați primit acest text. Pentru alte link-uri, de exemplu, situate pe partea dreaptă a acestei pagini, veți primi alte conținuturi. Astfel, link-ul reprezintă o comandă specifică de aplicații web.Sper că ați observat deja că diferite site-uri pot fi perfecte formate diferite pentru construirea unui șir de adrese. Fiecare format poate afișa arhitectura aplicației web. Deși nu este întotdeauna cazul, dar în majoritatea cazurilor este un fapt evident.
Luați în considerare două opțiuni pentru bara de adrese, care prezintă un profil de text și de utilizator.
Prima opțiune:
- www.example.com/article.php?id\u003d3.
- www.example.com/user.php?id\u003d4.
A doua opțiune:
- www.example.com/index.php?article\u003d3.
- www.example.com/index.php?user\u003d4.
Abordare cu multe puncte de interacțiune Puteți viziona forumurile cu motorul phpbb. Vizualizați forumul apare prin script viewforum.php., Vizualizați subiectul prin intermediul viewtopic.php. etc. A doua abordare, cu acces printr-un fișier de script fizic, poate fi observat în modelul meu CMS MODX, unde toate apelurile trec prin index.php..
Aceste două abordări sunt complet diferite. Primul este caracteristic al șablonului de control al paginii (Controler de pagini), iar a doua abordare este implementată de modelul controlerului de interogare (controlerul frontal). Controlerul de pagini este bine folosit pentru site-uri cu logică destul de simplă. La rândul său, controlerul de solicitare combină toate acțiunile de procesare a cererilor într-un singur loc, ceea ce îi conferă caracteristici suplimentare, datorită căruia puteți implementa sarcini mai dificile decât de obicei rezolvate de controlerul paginii. Nu voi intra în detaliile implementării controlerului de pagini și voi spune doar că controlorul de interogări va fi dezvoltat în partea practică (unele asemănări).
1.2. Routing URL.
Routura URL vă permite să configurați aplicația pentru primirea solicitărilor către adresa URL care nu îndeplinesc fișierele de aplicații reale, precum și utilizarea CNC-urilor care sunt semnificative semantic pentru utilizatori și sunt preferate pentru optimizarea motorului de căutare.De exemplu, pentru pagina obișnuită care afișează formularul de feedback, adresa URL ar putea arăta astfel:
http://www.example.com/contacts.php?action\u003dFeedback.
Codul aproximativ de procesare în acest caz:
comutator ($ _get ["acțiune"] (caz "despre": cerință_once ("aproximativ.php"); // pagina "Despre noi" Pauză; Cazul "Contacte": Necesar_once ("Contacte.php"); // pagina "Contacte" Pauză; Cauza "Feedback": Necesar ("Feedback.php"); // Pagina "Feedback" Pauză; Implicit: cerință_once ("pagina 404.php"); // pauză "404"; )
Cred că aproape toată lumea a făcut-o.
Folosind motorul de rutare URL, puteți configura cererea de primire a acestor solicitări la aceleași informații:
http://www.example.com/contacts/feedback.
Aici contactele sunt un controler, iar feedback-ul este metoda Contact Controler care reprezintă forma de feedback etc. Vom reveni la această problemă în partea practică.
De asemenea, merită să știți că multe routere cadru web vă permit să creați rute de adrese URL arbitrare (specificați ce parte a URL-ului) și regulile pentru prelucrarea acestora.
Acum avem cunoștințe teoretice suficiente pentru a merge la practică.
2. Practica
Pentru a începe, creați următoarele structuri și foldere de fișiere:Privind înainte, voi spune că dosarul Core va stoca modelul, vizualizarea și controlerul clasei de bază.
Descendenții lor vor fi depozitați în directorii controlorilor, modelelor și vederilor. Fişier index.php. Acesta este un punct în cursul aplicației. Fişier bootstrap.php. Inițiază descărcarea aplicației prin conectarea tuturor modulelor necesare etc.
Vom merge secvențial; Deschideți fișierul index.php și completați-l cu următorul cod:
INI_SET ("display_errors", 1); Necesită "aplicație / bootstrap.php";
Nu ar trebui să existe întrebări aici.
Apoi, mergem imediat la FALU bootstrap.php.:
necesită_once "Core / model.php"; Necesită_once "Core / Vizualizare.php"; Necesită "core / controller.php"; Necesită "core / rută.php"; Traseu :: Start (); // Rulați routerul
Primele trei linii vor fi conectate până în prezent fișierele de kernel inexistente. Ultimele linii se conectează la clasa routerului și rulați-o pentru a apela metoda Startic Start.
2.1. Implementarea routerului URL
Până în prezent, voi respinge de la implementarea modelului MVC și voi lua mrachrutizarea. Primul SH este că trebuie să facem, să scrieți următorul cod în .htaccess.:Rewriteengine pe rewritescond% (solicitare_filename)! -F rescriereCOND% (solicitare_filename)! -D rewriterule * Index.php [l]
Acest cod va redirecționa procesarea tuturor paginilor index.php.Ce ne trebuie. Amintiți-vă în prima parte. Am vorbit despre controlorul frontal?!
Rutarea noastră vom fi plasați într-un fișier separat traseu.php. În directorul de bază. În acest fișier, descriem clasa de traseu, care va rula metodele de controlere, care la rândul lor vor genera o viziune a paginilor.
Conținutul fișierului Route.php
clase de clasă ( Static. funcția Start () () // controler și acțiune implicită $ Controller_name \u003d "principal"; $ Action_name \u003d "index"; $ Rute \u003d explodează ("/", $ _server ["solicitare_uri"]); // obțineți numele controlerului Dacă (! Gol ($ rute)) ($ controller_name \u003d $ rute;) // obțineți numele acțiunii dacă (! Rule goale (Rute)) ($ action_name \u003d $ rute;) // adăugați prefixe $ model_name \u003d "model_". $ controller_name; $ Controller_name \u003d "controller_". $ Controller_name; $ Action_name \u003d "acțiune_". $ Action_name; // pungă fișierul cu clasa de clasă (este posibil ca fișierul modelului să nu fie) $ model_file \u003d strtolower ($ model_name). "PHP"; $ Model_path \u003d "Aplicație / modele /" $ model_file; Dacă (File_exists ($ model_path)) (include "aplicație / modele /" $ model_file;) // pungă fișierul cu clasa controlerului $ Controller_file \u003d Strolower ($ controller_name). "PHP"; $ Controller_path \u003d "aplicație / controlere /". $ Controller_file; dacă (File_exists ($ controller_path)) (include "aplicație / controlere /" $ controller_file; altceva ( / * Ar fi corect să aruncați o excepție aici, dar să simplificați imediat efectuați o redirecționare a paginii 404 * / Route :: ErrorPage404 (); ) // Creați un controler $ Controller \u003d noul $ controller_name; $ Action \u003d $ action_name; dacă (metoda_exists (controler $, $ acțiune)) ( // Apelați controlerul $ Controller -\u003e $ acțiune (); ) Altfel ( // ar fi mai înțelept să aruncăm o excepție Route :: ErrorPage404 (); )) funcție ErrorPage404 () ( $ Host \u003d "http: //". $ _ server ["http_host"]. "/"; Antet (http / 1.1 404 nu a fost găsit "); Antet ("Status: 404 nu a fost găsit"); Antet ("locație:". $ Gazdă. "404"); ))
Observ că o logică foarte simplificată este implementată în clasă (în ciuda codului surround) și poate chiar să aibă probleme de securitate. Sa făcut intenționând, pentru că Scrierea unei clase de rutare cu drepturi depline merită cel puțin un articol separat. Luați în considerare punctele principale ...
În elementul global de matrice $ _Server ["solicitare_uri"] conține adresa completă pentru care utilizatorul a fost adresat.
De exemplu: example.ru/contacts/feedback
Folosind o funcție exploda. Separarea adreselor este făcută. Ca rezultat, primim numele controlerului pentru exemplul de mai sus, acesta este un controler. contacte. și numele acțiunii, în cazul nostru - părere.
Apoi, fișierul model este conectat (modelul poate fi lipsit) și fișierul controlerului, dacă este și în cele din urmă este creat, este creată o instanță a controlerului și se numește o acțiune, din nou, dacă a fost descrisă în clasa controlerului .
Astfel, atunci când comutați, de exemplu, la:
example.com/portfolio.
sau
example.com/portfolio/index.
routerul efectuează următoarele:
- conectați fișierul model_portfolio.php din dosarul modelelor care conține clasa Model_port folio;
- conectați fișierul controller_portfolio.php din folderul controlerelor care cuprinde clasa controler_portfolio;
- creați o instanță a clasei Controller_portfolio și cauzează acțiunea implicită - Action_index descris în ea.
example.com/ufo.
care o va transfera la pagina "404":
example.com/404.
Același lucru se întâmplă dacă utilizatorul se transformă în acțiune care nu este descris în controler.
2.2. Reveniți la implementarea MVC
Ne întoarcem la dosarul Core și adăugăm încă trei fișiere în fișierul traseu.php: model.php, vizualizare.php și controller.phpPermiteți-mi să vă reamintesc că vor conține clase de bază, ale căror scrisori vom începe acum.
Conținutul fișierului model.php.
modelul de clasă ( Public funcția Get_Data () ()
}
}
Clasa de clasă conține singura metodă de eșantionare a datelor goale care se va suprapune în clasele descendenților. Când creăm clase de descendenți, totul va deveni mai clar.
Conținutul fișierului view.php.
vizualizarea clasei (
// public $ template_view; // Aici puteți specifica o viziune generală a implicită.
funcția generată ( $ Content_view, $ template_view, $ date \u003d null)
{
/ * dacă (is_array ($ date)) (// transformăm elementele matricei în variabilele de extract ($ date);) * / Include "aplicație / vizualizări /". $ Template_view; ))
Nu este greu să ghiciți că metoda genera Concepute pentru a forma un tip. Următorii parametri sunt transmise:
- $ Content_file - tipuri de conținut de pagină care reflectă;
- $ template_file - șablon comun pentru toate paginile;
- $ Date - o matrice care conține elemente de conținut pagină. De obicei completate în model.
pentru a afișa un conținut specific al paginii.
În cazul nostru, șablonul general va conține antet, meniu, bara laterală și subsol, iar conținutul paginii va fi conținut într-o formă separată. Din nou, acest lucru se face pentru a simplifica.
Conținutul fișierului controller.php.
controller de clasă ( Public $ model; Public $ vedere; funcție __construct () ( $ acest -\u003e View \u003d Noua vizualizare (); ))
Metodă action_index. - Aceasta este acțiunea cauzată de neplată, o vom bloca la punerea în aplicare a claselor descendenților.
2.3. Implementarea claselor de descendenți ai modelului și a controlorului, creând o viziune "
Acum începe cele mai interesante! Cartea de vizită a site-ului nostru va consta din următoarele pagini:- principalul
- Servicii
- Portofoliu.
- Contacte
- Precum și - pagina "404"
Fișierul selectat separat pe figura anterioară. templl_view.php. - Acesta este un șablon care conține marcajul general pentru toate paginile. În cel mai simplu caz, ar putea să arate așa:
<hTML LANG \u003d "RU"\u003e
<head\u003e
<meta Charset \u003d "UTF- 8"\u003e <titlu\u003eprincipalultitlu\u003e
head\u003e
<corp\u003e
$ Content_view; ?\u003e corp\u003e
hTML\u003e
Pentru a da site-ului vizualizării prezente, șablonul CSS se suprapune și îl integrează în site-ul nostru prin schimbarea structurii HTML Markup și conectați fișierele CSS și JavaScript:
<lINK REL \u003d "Stylesheet" Type \u003d "Text / css" href \u003d "/ css / stil.css" /\u003e
<script src \u003d "/ js / jquery-1.6.2.js" tip \u003d "text / javascript"\u003escript\u003e
La sfârșitul articolului, în secțiunea "Rezultat", o referire la depozitul GitHub cu proiectul, care a fost făcut pentru a integra un șablon simplu.
2.3.1. Creați pagina principală
Să începem cu controlerul controller_main.php., Aici este codul său:class Controller_Main extinde controlerul ( funcția action_index () ( $ acest -\u003e Vizualizare-\u003e Generare ("main_view.php", "template_view.php"); ))
În metoda genera O instanță a clasei de vizualizare este transmisă de numele fișierelor șablonului comune și de tipul conținutului paginii.
În plus față de indicele din controler, desigur, pot fi incluse alte acțiuni.
Fișierul cu o viziune comună pe care am luat-o mai devreme. Luați în considerare fișierul de conținut main_view.php.:
<h1\u003eBine ati venit!h1\u003e
<p\u003e
<img src \u003d "/ imagini / office-mic.jpg" align \u003d "stânga"\u003e
<un href \u003d "/"\u003eEchipa Ololosh.a\u003e - Echipa de specialiști de primă clasă în dezvoltarea de site-uri web cu mulți ani de experiență care colectează măști mexicane, statui de bronz și piatră din India și Ceylon, Basoreliefs și sculpturi create de maeștrii Africii Ecuatoriale timp de cinci până acum șase secole în urmă .. .p\u003e
Acesta conține o notă simplă fără apeluri PHP.
Pentru a afișa pagina principală, puteți utiliza într-una din următoarele adrese:
- metode de biblioteci care implementează datele de abstriciune. De exemplu, metodele bibliotecii Pear MDB2;
- metodele ORM;
- metode de lucru cu nosql;
- si etc. Pentru simplitate, aici nu vom folosi cereri SQL sau operatorii ORM. În schimb, luăm date reale și rambursați imediat matricea rezultată.
- Controller_login În care este generat o formă cu un formular pentru introducerea unei autentificări și parolă, după completarea procedurii de autentificare și, dacă este reușită, utilizatorul este redirecționat către admin.
- Contorler_admin cu o acțiune index, în care este verificată dacă utilizatorul a fost autorizat anterior pe site ca administrator (dacă a fost, tipul de administrator este afișat) și deconectarea exercițiului pentru încălzire.
- primăvară-securitate-Web 4.2.3.Relează: Primăvară-securitate-Web.
- sPRIND-SECURITY-CONFIG 4.2.3 Seleaza: Config Security-Security.
- primăvară WebMVC 4.3.9.Relează: Primăvară MVC MVC.
- javax.servlet-API 3.1.0 Java servlet API
- JDK 1.8.
- Maven 3.3.9.
- LOGIN_REDIRECT_URL.: Raportează ce adresă URL pentru a redirecționa utilizatorul după logare în sistem.
- Login_url. : URL-ul pentru a redirecționa utilizatorul la intrare (de exemplu, folosind decoratorul login_required.)
- Logout_url. : URL pentru redirecționarea utilizatorului
- Pentru a evidenția secțiunea curentă din meniu utilizând CSS. De asemenea, afișează numele de utilizator și link-ul pentru a vă conecta dacă utilizatorul a trecut autentificarea sau linkul pentru a vă conecta.
Deschis în browser http://127.0.0.1:8000/account/login/. Trebuie să vedeți fluxul de intrare. Introduceți datele de conectare și parola valide. Veți vedea următoarele:
Puteți vedea că secțiunea mea de bord este evidențiată cu CSS, deoarece are clasă selectat.. Deoarece utilizatorul a trecut autentificarea, numele de utilizator este afișat în partea dreaptă a antetului. Faceți clic pe Link. Logout.. Veți vedea următoarea pagină:
Pe această pagină puteți vedea că utilizatorul a ieșit din sistem și, prin urmare, meniul site-ului web nu mai este afișat. Link-ul din partea dreaptă a lui Heder arată acum Autentificare.
Dacă vedeți pagina de deconectare din site-ul de administrare Dzhango și nu propriul pagină de ieșire a sistemului, verificați setările instalate_Apps și asigurați-vă că django.contrib.admin. este după aceea cont. Ambele șabloane sunt în aceeași cale relativă, iar încărcătorul șablonului Dzhango va folosi primul găsit.
Django vine cu o mulțime de resurse încorporate pentru cele mai frecvente cazuri de utilizare a unei aplicații web. Aplicația de înregistrare este un exemplu foarte bun și un lucru bun este că caracteristicile pot fi utilizate în afara casetei.
Cu aplicația de înregistrare Django puteți prelua avantajele următoarelor caracteristici:
- Autentificare.
- Logout.
- Inscrie-te.
- Resetare parola.
În acest tutorial ne vom concentra în caracteristicile de conectare și logout. Pentru resetarea înscrierii și parolei, verificați tutorialele de mai jos:
Noțiuni de bază.
Înainte de a începe, asigurați-vă în instalate_Apps și autentificare MiddleLled_Apps și middleware-ul de autentificare configurat corect în setările Middleware_Classes.
Ambele vin deja configurate atunci când porniți un nou proiect Django utilizând comanda StartProject. Deci, dacă nu ați eliminat configurațiile inițiale, ar trebui să fiți configurați.
În cazul în care începeți un nou proiect doar pentru a urma acest tutorial, creați un utilizator utilizând linia de comandă doar pentru a putea testa paginile de conectare și logout.
$ Python gestiona.py createuperuserLa sfârșitul acestui articol, voi furniza codul sursă al exemplului cu configurația minimă.
Configurați rutele URL
Importați mai întâi modulul Django.contrib.Ath.AUTH.VOES și adăugați o rută URL pentru vizualizările de conectare și logout:
de la django.conf.urls URL de import de la django.conrib import admin de la django.contrib.Ath importă vizionări ca auth_views urlpatterns \u003d [adresa URL (R "^ Login / $", Auth_views. Login, Nume \u003d "Login"), URL ( R "^ logout / $", Auth_views. Logout, Nume \u003d "Logout"), URL (R "^ admin /", admin. URL-uri),]Creați un șablon de conectare
În mod implicit, django.contrib.atth.views.login View va încerca să facă șablonul de înregistrare / login.html. Deci, configurația de bază ar crea un dosar numit registry și plasați un șablon de login.html în interior.
După un șablon de conectare minim:
(% Se extinde "base.html"%) (% bloc bloc%) Login (% Blocul de bloc%) (% bloc bloc%)
Autentificare.
(% Block Block%)Acest exemplu simplu validează deja numele de utilizator și parola și autentificați corect utilizatorul.
Personalizarea vizualizării de conectare
Există câțiva parametri pe care puteți trece la vizualizarea de autentificare pentru a vă potrivi proiectului. De exemplu, dacă doriți să stocați șablonul de conectare în altă parte decât puteți trece numele șablonului ca parametru:
URL (R "^ Login / $", Auth_views. Login, ("template_name": "Core / LOGIN.HTML"), Name \u003d "Login"),De asemenea, puteți trece un formular de autentificare personalizat utilizând parametrul Autentificare_form, incase ați implementat un model de utilizator personalizat.
Acum, o configurație foarte importantă se face în fișierul setări.py, care este URL Django va redirecționa utilizatorul după o autentificare de succes.
În interiorul setărilor.py File Adaugă:
LOGIN_REDIRECT_URL \u003d "HOME"Valoarea poate fi o adresă URL hardcode sau un nume de adrese URL. Valoarea implicită pentru LOGIN_REDIRECT_URL este / Conturi / Profil /.
De asemenea, este important să rețineți că Django va încerca să redirecționeze utilizatorul la următorul param.
Configurarea vizualizării deconectate
După ce a permis django.contrib.auth.Views.logout vedere, Django va face șablonul de înregistrare / logged_out.html. În mod similar, după cum am făcut în vizualizarea de conectare, puteți trece un alt șablon ca așa:
URL (R "^ logout / $", Auth_views. Logout, ("template_name": "logged_out.html"), nume \u003d "logout"),De obicei, prefer să folosesc parametrul următor_page și să redirecționeze fie la pagina de pornire a proiectului meu, fie la pagina de conectare atunci când are sens.
Fișier model. mode_portfolio.php. Poziția în dosarul modelelor model. Iată conținutul său:
class Model_portfolio extinde modelul ( Public funcția Get_Data () () Return Array (matrice (an "\u003d\u003e" 2012 "," site "\u003d\u003e" http://dunkelbeer.ru "," descriere "\u003d\u003e "Site-ul de promovare a berii Darkel de la producătorul german Löwenbraü produs în compania de preparare a Brewing Rusia" poate IBEV "."), Array ("An" \u003d\u003e "2012", "Site" \u003d\u003e "http://zopomobile.ru", "descriere" \u003d\u003e "Catalogul lingvistic rusesc al telefoanelor chineze de Zopo pe baza sistemului de operare android și a accesoriilor acestora".), // A FACE); ))
Clasa controlerului modelului este conținută în fișier. controller_portfolio.php., Aici este codul său:
class Controller_portfolio extinde controlerul (
funcție __construct () ( $ acest -\u003e modelul \u003d noul model_portfolio (); $ acest -\u003e View \u003d Noua vizualizare (); ) funcția action_index () ( $ Date \u003d $ acest -\u003e model-\u003e get_data (); $ acest -\u003e Vizualizare-\u003e Generare ("portofoliu_view.php", "template_view.php", $ date); ))
Într-o variabilă date. Matricea returnată de metodă este înregistrată obțineți date.pe care le-am considerat mai devreme.
Apoi, această variabilă este transmisă ca parametru de metodă. generaCare este, de asemenea, transmis: numele fișierului cu un șablon comun și numele fișierului care conține o vizualizare a conținutului paginilor.
Vizualizarea conținutului paginii este în fișier portofoliu_view.php..
Portofoliu.
An | Proiect | Descriere | . "$ Rând [" an "]." | "$ Rând [" site "]." | . "$ Rând [" descriere "]." | " ; }