Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Programe
  • Metode de trimitere a corespondenței. Creați o pagină de pornire

Metode de trimitere a corespondenței. Creați o pagină de pornire

V În ultima vreme Am de-a face din ce în ce mai mult cu mediocritatea în IT. Prietenii caută sfaturi, iar când începi să înțelegi subiectul, părul tău începe să stea pe cap în toate locurile posibile. Aflați cât au plătit prietenii servicii similare, experimentând un atac de șoc.

Zeci de mii de ruble sunt pur și simplu aruncate și în loc de simplificare, proprietarii de afaceri primesc probleme suplimentare... Poate că cineva va vedea problemele organizației sale în notă și va putea trage concluziile adecvate.

Sunt oameni cărora le place să-i mustre pe toată lumea și să-și laudă cunoștințele. Există astfel de „stângaci” în fiecare sferă. Poate că au trecut prin foc, apă și conducte de cupru în practica lor și au drept deplin deci rationament. În sferă tehnologia Informatiei, persoanele care se încadrează în această descriere sunt greu de întâlnit. Sunt prea multe tehnologii și este imposibil să fii expert în absolut orice.

O persoană poate fi expertă în mai multe domenii, dar nu în toate. De exemplu, munca mea de cele mai multe ori este asociată cu dezvoltarea de software. În acest domeniu mă simt mult mai încrezător decât în administrarea sistemului... Nu mă voi certa niciodată cu un administrator cool despre nuanțele de rutare a pachetelor, nu. Eu însumi am cunoștințe superficiale.

Nu îmi va fi greu să configurez componentele serverului, să ridic FireWall-ul sau gateway-ul Internet, dar nu încerc să petrec timp la un studiu detaliat al straturilor modelului OSI. Nu mi-e puțin rușine de asta, tk. Ma intereseaza mai mult un alt domeniu.

Astăzi am avut șansa să vorbesc cu un expert similar în domeniul bazelor de date. Omul care s-a autointitulat cu mândrie profesionist a ruinat complet baza CSI și nici nu s-a gândit să-și recunoască vinovăția. Tocmai făcea o actualizare și ceva a mers prost. Copie de rezervăînainte de a instala actualizările nu a vrut să facă (chiar, de ce?) și când apare o problemă, nu și-a rupt capul. Tocmai am încărcat o copie de acum o lună și am raportat despre munca făcută.

Rece? Aproape că am căzut de pe scaun din cauza unui asemenea profesionalism. Nu este suficient să nu fi fost creată o politică de rezervă, așa că acest meșter nu s-a obosit să facă o copie înainte de aceasta operație importantă ca actualizarea structurii bazei de date. S-a dovedit că uitarea nu este principala lui problemă.

Am luat numărul de telefon al acestui specialist și am decis să sun personal. Nu se știe niciodată, dintr-o dată persoana a avut motive întemeiate să ia această decizie. Ar fi mai bine să nu sunați. Nu existau motive, ci incompetența și lipsa cunoștințelor elementare - un întreg val.

A încercat prost să se justifice, iar întrebările mele au provocat doar surpriză. Imaginați-vă, mi-a spus că programul nu folosește nicio tabele. Totul este stocat într-un singur fișier. Aceste cuvinte au ucis în cele din urmă particulele de credință în mine pentru un rezultat pozitiv. Mi-a povestit despre FireBird.

Deoarece totul este stocat într-un singur fișier și programul nu poate „citește” acest fișier, atunci trebuie doar să reveniți la copie veche... De ce să încerci să descoperi problema și măcar să renunți Informații importante direct de la mese? A fost inutil să continui conversația. Specialistul a ucis munca oamenilor într-o jumătate de lună dintr-o singură lovitură și a primit o recompensă.

Dacă organizația dumneavoastră nu este pregătită să mențină un specialist IT cu normă întreagă, atunci vă recomand cu tărie să aveți grijă să documentați strategia de interacțiune cu persoana care vine... Este necesar să-și oficializeze responsabilitățile pe hârtie, și să aibă o listă cu dotările de infrastructură de care este responsabil.

Acest lucru nu te va scuti de probleme, dar o va face înţelegere clară ceea ce face o persoană și ce domenii ale muncii sale necesită o atenție sporită. De exemplu, dacă nu ești expert în IT și compania ta are baze de date de care depinde viața organizației, atunci investește într-un software profesional de backup. Lăsați un specialist vizitator să o instaleze și veți primi rapoarte zilnice prin e-mail cu privire la rezultatele copiei de rezervă.

Nu întâmplător am vorbit software de cand în practică, am simțit că nu toți profesioniștii IT sunt pregătiți să automatizeze procesul de backup. Ei fie își asumă responsabilitatea de a face ei înșiși copii, fie doar joacă la ruleta rusă. Drept urmare, doar tu - șeful companiei - pierzi din această situație.

22.05.06 83.2K

Ți-ai dorit vreodată să instalezi un formular de feedback pe site-ul tău? Probabil ați întâlnit scripturi similare. În mod ciudat, scripturile gata făcute pentru trimiterea unui formular pe e-mail sunt foarte populare (puteți vedea acest lucru în orice arhivă de scripturi) și există foarte multe dintre ele. Sunt unele simple în care nimic nu se schimbă, dar există complexe și sisteme mari acea funcție pe mysql, vă permite să schimbați în mod dinamic orice câmpuri, să conțină o grămadă de setări... Dar sunt chiar necesare? În opinia mea, necesitatea unor astfel de sisteme este foarte îndoielnică.

Nu puteți testa trimiterea de e-mail pe computerul dvs. de acasă. Pentru a face acest lucru, aveți nevoie de o găzduire cu suport php și funcții de trimitere a e-mailului. Vă recomand furnizorul de găzduire runweb.ru. Acest furnizor oferă tarife excelente, viteza cea mai mare acces si servicii excelente.

Metode de trimitere a corespondenței

Trimite e-mail de pe server cu folosind php se poate face în două moduri principale.
Vreau să trec peste ambele în ordine.

Primul și cel mai ușor este folosind php funcțiile mail (). Funcția este foarte simplă și directă, deși trimite e-mail cu folosind mail() are, de asemenea, o serie de dezavantaje. Cel mai important este că scrisoarea nu este trimisă direct, ci prin php. Simultan program phpînlocuiește unele dintre câmpurile sale din scrisoare. De exemplu, nu veți putea indica corect expeditorul. În câmpul „de la” (adică de la cine a venit scrisoarea), în cele mai multe cazuri, va fi numele serverului. Chestia este că php își înlocuiește anteturile în linia de serviciu a literei „de la”.

Cu toate acestea, trimiterea de e-mailuri folosind funcția de e-mail () rămâne cea mai ușoară
modalitate de a trimite o scrisoare de la server. Să aruncăm o privire mai atentă la această metodă.

Funcția mail () are următoarea sintaxă:

mail ($ către, $ subiect, $ corp, $ anteturi);

$ to este adresa destinatarului. De exemplu, " [email protected]". $ subiect - subiectul scrisorii. De exemplu," Ați primit o scrisoare ". $ body - textul mesajului. $ anteturi - orice antet ale scrisorii. De exemplu, adresa expeditorului va arăta astfel :" din: [email protected]".

Aici exemplu complet trimiterea de e-mailuri prin e-mail ():

Poștă (" [email protected]"," Subiectul e-mailului "," Buna ziua! NAți primit un e-mail. "," De la: site_name ");

Vă rugăm să rețineți că atunci când utilizați această funcție pe un computer de acasă, poate da o eroare, deoarece nu poate trimite un e-mail fără un server de e-mail.

Acum să vedem cum puteți trimite e-mail folosind sendmail.

sendmail este program standard sala de operatie sisteme unix care trimite mail.
php poate rula programe Unix folosind conducte. Această facilitate Unix vă permite să direcționați datele de la un program la altul, la fel cum scriem într-un fișier. Singurul fișier în acest caz este programul (în special sendmail), care primește datele.

Programul sendmail are multe opțiuni, vom folosi câteva dintre ele. Pentru a utiliza sendmail, trebuie să deschideți o conductă către acesta. În php, acest lucru se face folosind comanda popen (), care este identică ca sintaxă cu comanda fopen (). Folosind popen () deschidem un flux către sendmail
pentru a-i scrie (rețineți, parametrul modului „w”?), după care îi puteți trimite date cu comanda obișnuită fputs (). Să vedem cum arată întreaga procedură de trimitere a unei scrisori prin sendmail:

anteturi rfc literele $ de la = " [email protected]"; $ destinatari =" [email protected]"; $ headers =" tipul de conținut: text / simplu; set de caractere = "windows-1251" "; // deschide sendmail și trimite mail $ mail = popen (" / usr / sbin / sendmail -i -f $ de la - $ destinatari "," w "); $ text_headers =" de la : $ fromnsubject: $ subiect ". $ anteturi; fputs ($ mail, $ text_headers); fputs ($ mail," n "); fputs ($ mail, $ body); // verificarea erorilor $ rezultat = pclose ($ mail) ) >> 8 & 0xff; dacă ($ rezultat) echo „eroare sendmail! cod de eroare: $ rezultat ";?>

În acest program, primul lucru pe care îl facem este să descriem anteturile rfc. rfc sunt câmpuri de serviciu care conțin toate informațiile despre scrisoare. Puteți vedea un exemplu de rfc, de exemplu, în programați bat !, făcând clic dreapta pe textul literei și selectând „anteturi rfc-822” (numele articolului poate diferi). Pentru a le elimina, repetați pașii. În antet, descriem câmpurile „tip de conținut”, care indică faptul că mesajul este text și în codificare Windows-1251 (standard codificare Windows). „Koi8-r” poate fi folosit și ca codificare, aceasta este codarea standard Unix. În acest articol, nu vom intra în detaliu posibilele antete rfc. O vom face puțin mai târziu,
când vom lucra mai aproape cu poșta. Deci, după ce am descris variabilele serviciului și antetele mesajelor, deschidem sendmail. Observați calea către programul „/ usr / sbin / sendmail”. Pe servere diferite poate fi diferit!
Dacă această linie nu funcționează, întrebați ISP-ul dvs. unde se află sendmail. Sunt specificați următorii parametri: „-i -f $ de la - $ destinatari”. Aceștia sunt parametri standard pentru trimiterea unei scrisori și în ele sunt înlocuite două câmpuri: $ de la - de la cine, $ destinatari - adresele destinatarilor. În cazul nostru, variabila $ destinatari conține o singură adresă. De fapt, puteți folosi mai multe adrese, specificându-le separate printr-un spațiu:

$ destinatari = " [email protected] [email protected] [email protected]";

Apoi, scriem în flux mai întâi anteturile mesajelor (variabila $ text_headers), apoi le separăm cu o întrerupere de linie și scriem textul mesajului. Ultimul pas- închiderea fluxului și verificarea unei erori. Dacă este executat corect, zero este plasat în variabila rezultat $, iar dacă a apărut o eroare, numărul erorii este scris în ea.

Acum să ne uităm la un exemplu de utilizare a capabilităților de trimitere a e-mailurilor. Pentru a face acest lucru, vom crea un formular de feedback pe care îl puteți instala pe site-ul dvs. Vom folosi sendmail ca metodă de trimitere a e-mailurilor.

Creați un formular de feedback

Formularul nostru de feedback va fi un singur script. Acest script va afișa formularul și va trimite scrisoarea.

contact.php:

Părere Eroare:$ s ";?>

Comunicare directă
Numele dumneavoastră: *
Email-ul tau: *
Site-ul tau:
Mesajul dvs: *

Câmpurile marcate cu un asterisc (*) trebuie completate.> 8 & 0xff; ) else $ rezultat = (mail ($ destinatari, $ subiect, $ corp, "de la:". $ de la. "rn". $ anteturi)? FALSE: ADEVĂRAT); if ($ rezultat) echo "Mesajul nu a fost trimis!"; else echo "Vă mulțumesc, mesajul dvs. a fost trimis. Administratorul vă va contacta în curând!"; ?>

Acum să aruncăm o privire la cum funcționează acest program. Execuția începe cu linia „dacă (! $ A) show_form ();”, pentru că înainte a fost specificată o funcție care, desigur, nu este executată. În această linie, verificăm dacă a existat o încercare de completare a formularului (din formular, după cum puteți vedea, este trecută variabila $ a, care este bifată în această linie). Dacă nu există o astfel de încercare, este apelată funcția show_form (), care afișează formularul.

Mulți încep să scrie un proiect pentru a lucra cu o singură sarcină, fără a presupune că acesta poate crește într-un sistem de management multi-utilizator, ei bine, să spunem, conținut, sau Doamne ferește, producție. Și totul pare să fie cool și cool, totul funcționează până când începi să înțelegi că codul care este scris este format în întregime din cârje și hardcode. Cod amestecat cu aspect, solicitări și cârje, uneori chiar ilizibile. Apare o problemă urgentă: atunci când adăugați noi funcții, trebuie să vă chinuiți acest cod pentru o perioadă foarte lungă de timp, amintindu-vă „ce a fost scris acolo?” și blestemă-te pe tine în trecut.

Poate că ați auzit chiar de modele de design și chiar ați răsfoit aceste cărți excelente:

  • E. Gamma, R. Helm, R. Johnson, J. Vlissides „Tehnici de proiectare orientate pe obiecte. Modele de design ";
  • M. Fowler „Arhitectura aplicațiilor software pentru întreprinderi”.
Și mulți, fără să se teamă de manuale și documentație uriașă, au încercat să studieze oricare dintre cadrele moderne și s-au confruntat cu dificultatea de înțelegere (datorită prezenței multor concepte arhitecturale legate inteligent între ele) au pus studiul și aplicarea instrumentelor moderne. pe arzătorul din spate.

Articolul prezentat va fi util în primul rând pentru începători. Oricum, sper că în câteva ore vă puteți face o idee Implementări MVC model, care stă la baza tuturor cadrelor web moderne și, de asemenea, obține „hrană” pentru a se gândi în continuare - „cum se face”. La sfârșitul articolului, există o selecție de link-uri utile care vă vor ajuta, de asemenea, să înțelegeți din ce sunt făcute cadrele web (pe lângă MVC) și cum funcționează.

Este puțin probabil ca programatorii PHP de bază să găsească ceva nou pentru ei înșiși în acest articol, dar observațiile și comentariile lor asupra textului principal ar fi de mare ajutor! pentru că fără teorie, practica este imposibilă, iar fără practică, teoria este inutilă, atunci mai întâi va fi puțină teorie și apoi vom trece la practică. Dacă sunteți deja familiarizat cu conceptul de MVC, puteți sări peste secțiunea teorie și să treceți direct în practică.

1. Teorie

Modelul MVC descrie o modalitate ușoară de a construi structura unei aplicații, cu scopul de a separa logica de afaceri de interfața cu utilizatorul. Ca rezultat, aplicația este mai ușor de scalat, testat, întreținut și, desigur, implementat.

Să aruncăm o privire la schema conceptuală a modelului MVC (în opinia mea, aceasta este cea mai de succes schemă pe care am văzut-o):

În arhitectura MVC, modelul oferă date și reguli de logica de afaceri, vizualizarea este responsabilă pentru interfața cu utilizatorul, iar controlerul este responsabil pentru interacțiunea dintre model și vizualizare.

Un flux de lucru tipic pentru o aplicație MVC poate fi descris după cum urmează:

  1. Când un utilizator introduce o resursă web, scriptul de inițializare creează o instanță a aplicației și o lansează pentru execuție.
    Aceasta afișează o vedere a, să zicem, pagina de pornire a site-ului.
  2. Aplicația primește o solicitare de la utilizator și determină controlerul și acțiunea solicitate. În cazul unei pagini master, acțiunea implicită ( index).
  3. Aplicația instanțează controlerul și rulează metoda de acțiune,
    care, de exemplu, conține apeluri model care citesc informații din baza de date.
  4. După aceea, acțiunea generează o vizualizare cu datele obținute din model și afișează rezultatul utilizatorului.
Model- conține logica de business a aplicației și include metode de preluare (acestea pot fi metode ORM), procesare (de exemplu, reguli de validare) și furnizare de date specifice, ceea ce o face adesea foarte groasă, ceea ce este destul de normal.
Modelul nu trebuie să interacționeze direct cu utilizatorul. Toate variabilele legate de solicitarea utilizatorului trebuie procesate în controler.
Modelul nu trebuie să genereze HTML sau alt cod de afișare care se poate modifica în funcție de nevoile utilizatorului. Un astfel de cod trebuie procesat în vizualizări.
Același model, de exemplu: modelul de autentificare a utilizatorului poate fi utilizat atât în ​​partea de utilizator, cât și în partea administrativă a aplicației. În acest caz, puteți muta codul comun în clasa separatași moștenesc din acesta, definind metode specifice sub-aplicației în descendenți.

Vedere- folosit pentru a seta afișarea externă a datelor primite de la controler și model.
Vizualizările conțin markup HTML și mici inserții de cod PHP pentru a parcurge, formata și afișa datele.
Nu ar trebui să acceseze direct baza de date. Acest lucru ar trebui să fie făcut de modele.
Nu ar trebui să funcționeze cu datele obținute dintr-o solicitare a utilizatorului. Această sarcină trebuie îndeplinită de controlor.
Poate accesa direct proprietățile și metodele controlerului sau modelelor pentru a obține date gata de ieșire.
Vizualizările sunt de obicei împărțite într-un șablon comun care conține marcajul comun tuturor paginilor (de exemplu, un antet și un subsol) și părți ale șablonului care sunt utilizate pentru afișarea datelor de ieșire din model sau pentru afișarea formularelor de introducere a datelor.

Controlor- lipiciul care conectează modele, vederi și alte componente în aplicație de lucru... Controlorul este responsabil pentru gestionarea cererilor utilizatorilor. Controlerul nu trebuie să conțină interogări SQL. Cel mai bine sunt păstrate în modele. Controlerul nu trebuie să conțină HTML sau alte markupuri. Ar trebui scos la specie.
Într-o aplicație MVC bine proiectată, controlerele sunt de obicei foarte subțiri și conțin doar câteva zeci de linii de cod. The Stupid Fat Controllers (SFC) în CMS Joomla... Logica controlerului este destul de tipică și cea mai mare parte este realizată în clase de bază.
Modelele, pe de altă parte, sunt foarte groase și conțin cea mai mare parte a codului de procesare a datelor. structura datelor și logica de afaceri pe care le conține sunt de obicei destul de specifice aplicației.

1.1. Controler frontal și controler de pagină

În cele mai multe cazuri, interacțiunea utilizatorului cu aplicația web are loc prin clic pe linkuri. Uită-te acum la bara de adrese a browserului tău - acest link ai primit acest text. Alte link-uri, cum ar fi cel din dreapta acestei pagini, vă vor oferi conținut diferit. Astfel, linkul reprezintă o comandă specifică aplicației web.

Sper că ați observat deja că site-uri diferite pot avea formate de compilare diferite perfecte. bara de adresa... Fiecare format poate reprezenta arhitectura unei aplicații web. Deși nu este întotdeauna cazul, în majoritatea cazurilor este un fapt clar.

Luați în considerare două opțiuni pentru bara de adrese, care arată un fel de text și profil de utilizator.

Cod de procesare aproximativ în acest caz:
comutați ($ _ GET ["acțiune"]) (case "despre": require_once ("about.php"); // Despre noi pauză de pagină; case "contacts": require_once ("contacts.php"); // pagină „Contacte” pauză; caz „feedback”: require_once („feedback.php”); // pauză de pagină „Feedback”; implicit: require_once („page404.php”); // pagina „404” pauză;)
Cred că aproape toată lumea a făcut asta înainte.

Folosind motorul de rutare URL, vă puteți configura aplicația să accepte aceste solicitări pentru a afișa aceleași informații:
http://www.example.com/contacts/feedback

Aici contacts este un controler, iar feedbackul este o metodă de controler numită contacte care afișează un formular de feedback etc. Vom reveni asupra acestei probleme în partea practică.

De asemenea, merită să știți că multe routere cadru web vă permit să creați rute URL arbitrare (specificați ce înseamnă fiecare parte a adresei URL) și cum să le gestionați.
Acum avem suficiente cunoștințe teoretice pentru a trece la practică.

2. Practică

Mai întâi, să creăm următoarea structură de fișiere și foldere:


Privind în viitor, voi spune că folderul de bază va stoca clasele de bază Model, View și Controller.
Descendenții lor vor fi stocați în directoarele de controlere, modele și vizualizări. Fişier index.php acesta este un punct în rândul aplicației. Fişier bootstrap.php inițiază descărcarea aplicației, conectând toate modulele necesare etc.

Vom merge consecvent; deschideți fișierul index.php și completați-l cu următorul cod:
ini_set („erori de afișare”, 1); require_once "aplicație / bootstrap.php";
Nu ar trebui să existe întrebări.

Apoi, să trecem direct la fișier bootstrap.php:
require_once "core / model.php"; require_once "core / view.php"; require_once "core / controller.php"; require_once "core / route.php"; Traseu :: start (); // pornește routerul
Primele trei linii se vor conecta deocamdată fisiere inexistente miezuri. Ultimele linii conectează fișierul cu clasa routerului și îl pornesc pentru execuție apelând metoda de pornire statică.

2.1. Implementarea ruterului URL

Să ne abatem de la implementare pentru moment Modele MVCși hai să facem rutare. Primul pas pe care trebuie să-l facem este să scriem următorul cod .htaccess:
RewriteEngine On RewriteCond% (REQUEST_FILENAME)! -F RewriteCond% (REQUEST_FILENAME)! -D RewriteRule. * Index.php [L]
Acest cod va redirecționa procesarea tuturor paginilor către index.php, care este ceea ce avem nevoie. Vă amintiți că în prima parte am vorbit despre Front Controller?!

Vom introduce rutarea dosar separat traseu.php la directorul de bază. În acest fișier, vom descrie clasa Route, care va rula metodele controlerului, care la rândul lor vor genera vizualizarea paginii.

Conținutul fișierului Route.php

clasa Route (funcția statică start () (// controler și acțiune implicită $ controller_name = "Main"; $ action_name = "index"; $ rute = explode ("/", $ _SERVER ["REQUEST_URI"]); // obține numele controlerului dacă (! gol ($ rute)) ($ nume_controller = $ rute;) // obține numele acțiunii dacă (! gol ($ rute)) ($ nume_acțiune = $ rute;) // adaugă prefixele $ model_name = " Model _ ". $ Controller_name; $ controller_name =" Controller _ ". $ Controller_name; $ action_name =" action _ ". $ Action_name; // conectați fișierul cu clasa de model (s-ar putea să nu existe un fișier model) $ model_file = strtolower ($ model_name). ".php"; $ model_path = "aplicație / modele /".$ model_file; if (fișier_există ($ model_path)) (include" aplicație / modele /".$ model_file ;) // leagă fișierul cu clasa controler $ controller_file = strtolower ($ controller_name). ". php"; $ controller_path = "application / controllers /".$ controller_file; if (file_exists ($ controller_path)) (include" aplicație / controllers /".$ controller_f ile; ) else (/ * ar fi corect să aruncăm o excepție aici, dar pentru simplitate, să redirecționăm imediat la o pagină 404 * / Route :: ErrorPage404 ();) // creăm un controller $ controller = new $ controller_name; $ action = $ action_name; if (method_exists ($ controller, $ action)) (// apelează acțiunea controlerului $ controller -> $ acțiune ();) else (// aici ar fi, de asemenea, mai rezonabil să se arunce o excepție Route :: ErrorPage404 (); )) Funcția ErrorPage404 ( ) ($ gazdă = "http: //". $ _ SERVER ["HTTP_HOST"]. "/"; antet ("HTTP / 1.1 404 Nu a fost găsit"); antet ("Stare: 404 Nu a fost găsit" "); antet ("Locație: ". $ Gazdă." 404 ");))


Rețineți că clasa implementează o logică foarte simplificată (în ciuda codului voluminos) și poate avea chiar probleme de securitate. Acest lucru a fost făcut intenționat, deoarece scrierea unei clase de rutare cu drepturi depline merită cel puțin un articol separat. Să luăm în considerare punctele principale...

Elementul matricei globale $ _SERVER ["REQUEST_URI"] conține adresa completă la care a contactat utilizatorul.
De exemplu: example.ru/contacts/feedback

Folosind funcția exploda adresa este împărțită în componente. Ca rezultat, obținem numele controlerului, pentru exemplul dat, acesta este controlerul contacteși numele acțiunii, în cazul nostru - părere.

Apoi, fișierul model este conectat (modelul poate fi absent) și fișierul controler, dacă există și, în final, controlerul este instanțiat și acțiunea este apelată, din nou dacă a fost descrisă în clasa controlerului.

Astfel, când mergi, de exemplu, la adresa:
exemplu.com/portfolio
sau
exemplu.com/portfolio/index
routerul va face următoarele:

  1. va include fișierul model_portfolio.php din folderul modele care conține clasa Model_Portfolio;
  2. va include fișierul controller_portfolio.php din folderul controllers care conține clasa Controller_Portfolio;
  3. va crea o instanță a clasei Controller_Portfolio și va invoca acțiunea implicită - action_index descrisă în aceasta.
Dacă utilizatorul încearcă să contacteze adresa unui controler inexistent, de exemplu:
exemplu.com/ufo
apoi va fi redirecționat către pagina „404”:
exemplu.com/404
Același lucru se va întâmpla dacă utilizatorul întreprinde o acțiune care nu este descrisă în controler.

2.2. Înapoi la implementarea MVC

Să mergem la folderul de bază și să adăugăm încă trei fișiere în fișierul route.php: model.php, view.php și controller.php


Permiteți-mi să vă reamintesc că vor conține clase de bază, pe care acum vom începe să le scriem.

Conținutul fișierului model.php
Model de clasă (funcția publică get_data () ())
Clasa de model conține o singură metodă de preluare a datelor goală care se va suprapune în clasele descendente. Când creăm clase de descendență, totul va deveni mai clar.

Conținutul fișierului vizualizare.php
Vizualizare clasă (// public $ template_view; // aici puteți specifica vizualizarea generală implicită.funcția genera ($ content_view, $ template_view, $ data = null) (/ * if (is_array ($ data)) (// transforma elemente matrice la variabile extrage ($ date);) * / include "aplicație / vizualizări /".$ template_view;))
Nu este greu de ghicit că metoda Genera conceput pentru a forma o vedere. Ii sunt trecuți următorii parametri:

  1. $ content_file - vizualizări care afișează conținutul paginii;
  2. $ template_file - șablon comun pentru toate paginile;
  3. $ data este o matrice care conține elemente de conținut ale paginii. De obicei, completați modelul.
Funcția include conectează în mod dinamic șablonul general (vizualizarea), în care va fi încorporată vizualizarea
pentru a afișa conținutul unei anumite pagini.

În cazul nostru, șablonul general va conține antet, meniu, bară laterală și subsol, iar conținutul paginilor va fi conținut în formă separată... Din nou, acest lucru este făcut pentru simplitate.

Conținutul fișierului controller.php
Class Controller (model public $; vizualizare $ public; funcția __construct () ($ this-> view = new View ();) function action_index () ())
Metodă action_index- aceasta este acțiunea implicită, o vom suprascrie atunci când implementăm clasele descendente.

2.3. Implementarea claselor descendente Model și Controller, crearea View "s

Acum începe distracția! Site-ul nostru de cărți de vizită va consta din următoarele pagini:
  1. Acasă
  2. Servicii
  3. Portofoliu
  4. Contacte
  5. Și, de asemenea, - pagina „404”
Fiecare pagină are propriul controler din folderul controlere și o vizualizare din folderul vizualizări. Unele pagini pot folosi modelul sau modelele din folderul modele.


În figura anterioară, fișierul este evidențiat separat. template_view.php este un șablon care conține un marcaj comun tuturor paginilor. În cel mai simplu caz, ar putea arăta astfel:
Acasă
Pentru a oferi site-ului un aspect prezentabil, ne compensăm Șablon CSSși să-l integrăm în site-ul nostru prin modificarea structurii de marcare HTML și conexiuni CSSși fișiere JavaScript:

La sfârșitul articolului, în secțiunea „Rezultat”, există un link către depozitul GitHub cu un proiect în care s-au făcut pași pentru integrarea unui șablon simplu.

2.3.1. Creați o pagină de pornire

Să începem cu controlerul controller_main.php, iată codul său:
clasa Controller_Main extinde Controller (funcția action_index () ($ this-> view-> generate ("main_view.php", "template_view.php");))
În metodă Genera sunt transmise o instanță a clasei View, numele fișierelor șablonului general și vizualizarea cu conținutul paginii.
Pe lângă acțiunea de index, controlerul poate conține, desigur, și alte acțiuni.

Am examinat fișierul cu o vedere generală mai devreme. Luați în considerare un fișier de conținut main_view.php:

Bine ati venit!

OLOLOSHA TEAM este o echipă de specialiști de top în dezvoltarea de site-uri web cu ani de experiență în colectarea măștilor mexicane, statui din bronz și piatră din India și Ceylon, basoreliefuri și statui create de maeștrii Africii Ecuatoriale în urmă cu cinci până la șase secole...


Conține un marcaj simplu, fără apeluri PHP.
Pentru a afișa pagina principală, puteți utiliza una dintre următoarele adrese:

Vom lua în considerare un exemplu folosind o vizualizare care afișează datele obținute din modelul de mai jos.

2.3.2. Creați o pagină de portofoliu

În cazul nostru, pagina Portofoliu este singura pagină care folosește modelul.
Modelul include de obicei metode pentru preluarea datelor, de exemplu:
  1. metode de biblioteci native pgsql sau mysql;
  2. metode ale bibliotecilor care implementează abstractizarea datelor. De exemplu, metodele bibliotecii PEAR MDB2;
  3. metode ORM;
  4. metode de lucru cu NoSQL;
  5. si etc.
Pentru simplitate, nu vom folosi aici interogări SQL sau instrucțiuni ORM. În schimb, vom emula date reale și vom returna imediat o serie de rezultate.
Fișier model model_portfolio.php pune înăuntru folderul modelelor... Iată conținutul acestuia:
clasa Model_Portfolio extinde Model (funcția publică get_data () (return array (array ("Anul" => "2012", "Site" => "http://DunkelBeer.ru", "Description" => "Dunkel de bere neagră de la producătorul german Löwenbraü produs în Rusia de către compania producătoare de bere „SAN InBev”. „), matrice („ Anul „=>” 2012 "," Site-ul "=>" http://ZopoMobile.ru "," Descrierea "=> „Catalog în limba rusă Telefoane chinezești de Zopo pe Baza Android OS și accesoriile acestora. "), // tot);))

Clasa de controler model este conținută în fișier controller_portfolio.php, iată codul său:
clasa Controller_Portfolio extinde Controller (funcția __construct () ($ this-> model = new Model_Portfolio (); $ this-> view = new View ();) function action_index () ($ data = $ this-> model-> get_data (); ); $ this-> view-> generate ("portfolio_view.php", "template_view.php", $ date);))
Într-o variabilă date se scrie matricea returnată de metodă Obțineți date la care ne-am uitat mai devreme.
În plus, această variabilă este transmisă ca parametru al metodei Genera, care se transmit și: numele fișierului cu șablonul comun și numele fișierului care conține vizualizarea cu conținutul paginii.

Vizualizarea care conține conținutul paginii se află în fișier portfolio_view.php.

Portofoliu

Toate proiectele din următorul tabel sunt fictive, așa că nici măcar nu încercați să urmați linkurile furnizate. "; } ?>
AnProiectDescriere
". $ rând [" Anul "]."". $ rând [" Site "]."". $ rând [" Descriere "]."


Totul este simplu aici, vizualizarea afișează datele obținute din model.

2.3.3. Creați restul paginilor

Restul paginilor sunt create în același mod. Codul lor este disponibil în depozitul de pe GitHub, un link către care este furnizat la sfârșitul articolului, în secțiunea „Rezultat”.

3. Rezultat

Și iată ce s-a întâmplat până la urmă:

Captură de ecran a site-ului de cărți de vizită rezultat



Link GitHub: https://github.com/vitalyswipe/tinymvc/zipball/v0.1

Dar în această versiune, am schițat următoarele clase (și vederile lor corespunzătoare):

  • Controller_Login în care se generează o vizualizare cu un formular de introducere a unui login și a unei parole, după completare se efectuează o procedură de autentificare și, dacă reușește, utilizatorul este redirecționat către panoul de administrare.
  • Contorller_Admin cu o acțiune de index, în care se verifică dacă utilizatorul a fost autorizat anterior pe site ca administrator (dacă a fost, atunci se afișează vizualizarea panoului de administrare) și o acțiune de logout pentru deconectare.
Autentificarea și autorizarea este un subiect diferit, așa că nu este tratat aici, ci este furnizat doar link-ul indicat mai sus, astfel încât să existe de la care să pornim.

4. Concluzie

Modelul MVC este folosit ca bază arhitecturală în multe cadre și CMS-uri, care au fost create pentru a putea dezvolta soluții mai complexe de calitate superioară într-o perioadă mai scurtă de timp. Acest lucru a devenit posibil datorită creșterii nivelului de abstractizare, deoarece există o limită a complexității structurilor pe care creierul uman poate opera.

Dar, utilizarea cadrelor web precum Yii sau Kohana, constând din câteva sute de fișiere, atunci când se dezvoltă aplicații web simple (de exemplu, site-uri de cărți de vizită) nu este întotdeauna recomandabilă. Acum putem crea un model MVC frumos pentru a nu amesteca PHP, Html, CSS și Cod JavaScriptîntr-un singur dosar.

Acest articol este mai mult un punct de plecare pentru a învăța CMF decât un exemplu de ceva cu adevărat corect pe care îl puteți lua ca bază pentru aplicația dvs. web. Poate chiar ea te-a inspirat și deja te gândești să-ți scrii propriul micro-cadru sau CMS bazat pe MVC. Dar, înainte de a reinventa următoarea bicicletă cu „blackjack și curve”, mai gândește-te, poate eforturile tale pot fi îndreptate mai înțelept spre dezvoltarea și ajutarea comunității unui proiect existent?!

P.S .: Articolul a fost rescris ținând cont de unele dintre comentariile lăsate în comentarii. Critica a fost de mare ajutor. Judecând după răspuns: comentarii, solicitări personale și numărul de utilizatori care au adăugat postarea la favorite, ideea de a scrie această postare s-a dovedit a nu fi atât de rea. Din păcate, nu este posibil să ținem cont de toate dorințele și să scriem din ce în ce mai în detaliu din lipsă de timp... dar poate că va fi făcut de acele figuri misterioase care minus versiunea originală. Mult succes cu proiectele tale!

5. O selecție de link-uri utile pe subiect

Articolul abordează foarte des subiectul cadrelor web - acesta este un subiect foarte larg, deoarece chiar și micro-cadrele constau din multe componente interconectate inteligent și ar fi nevoie de mai mult de un articol pentru a vorbi despre aceste componente. Totuși, am decis să dau aici selecție mică link-uri (pe care le-am urmărit când am scris acest articol), care într-un fel sau altul se referă la tema cadrelor.

Etichete: Adăugați etichete

Acest tutorial vă va arăta cum să creați cel mai simplu formular de contact HTML.

Mai întâi de toate creați 2 fișiere: contact_form.htmlși contact.php... Primul fișier va conține codul formularului dumneavoastră de contact, iar al doilea va prelucra datele acestui formular.

HTML

Mai jos este un exemplu de cod HTML pentru un formular de contact:

Numele dumneavoastră

Email-ul tau

Mesaj