Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Metodat e dërgimit të postës. Krijimi i faqes kryesore

Kohët e fundit Gjithnjë e më shumë më duhet të përballem me mediokritetin në IT. Miqtë kërkojnë këshilla dhe kur filloni të kuptoni temën, flokët fillojnë të ngrihen në të gjitha vendet e mundshme. Zbuloni se sa kanë paguar miqtë shërbime të ngjashme, ju përjetoni një sulm shoku.

Dhjetëra mijëra rubla thjesht hidhen dhe në vend të thjeshtimit, pronarët e bizneseve marrin probleme shtesë. Ndoshta dikush do të shohë problemet e organizatës së tyre në shënim dhe do të jetë në gjendje të nxjerrë përfundimet e duhura.

Ka njerëz që u pëlqen të qortojnë të gjithë dhe të lartësojnë njohuritë e tyre. Të tillë “të majtë” ka në çdo fushë. Ndoshta ata kanë kaluar nëpër tuba zjarri, uji dhe bakri në praktikën e tyre dhe kanë kaluar çdo të drejtë arsye si ajo. Në fushë teknologjitë e informacionitËshtë e vështirë të takosh njerëz që i përshtaten këtij përshkrimi. Ka shumë teknologji dhe është e pamundur të jesh ekspert në absolutisht çdo gjë.

Një person mund të jetë ekspert në disa fusha, por jo në të gjitha. Për shembull, shumica e punës sime përfshin zhvillimin e softuerit. Ndihem shumë më i sigurt në këtë fushë sesa në këtë fushë administrimi i sistemit. Unë kurrë nuk do të debatoj me një administrator të ashpër për nuancat e rrugëtimit të paketave, sepse ... Unë vetë kam njohuri sipërfaqësore.

Nuk do të jetë e vështirë për mua të konfiguroj komponentët e serverit, të vendos një Firewall ose një portë Interneti, por nuk përpiqem të kaloj kohë duke studiuar shtresat e modelit OSI në detaje. Nuk më vjen aspak turp për këtë, sepse... Unë jam më i interesuar për një fushë tjetër.

Sot pata rastin të bisedoja me një të tillë të ditur në fushën e bazave të të dhënave. Një njeri që me krenari e quante veten profesionist shkatërroi plotësisht bazën e të dhënave të CIS dhe as që mendoi të pranonte fajin e tij. Ai thjesht po bënte një përditësim dhe diçka shkoi keq. Rezervimi Ai nuk donte të bënte ndonjë përditësim përpara se të instalonte përditësimet (me të vërtetë, pse?) dhe kur lindte një problem, ai nuk e shqetësonte të grumbullonte trurin e tij. Sapo ngarkova një kopje të një muaji më parë dhe raportova për punën e bërë.

E bukur? Për pak sa nuk rashë nga karrigia nga një profesionalizëm i tillë. Jo vetëm që nuk u krijua asnjë politikë rezervë, por ky mjeshtër nuk u mërzit të bënte një kopje më parë operacion i rëndësishëm si përditësimi i strukturës së bazës së të dhënave. Doli se harresa nuk ishte problemi i tij kryesor.

Mora numrin e telefonit të këtij specialisti dhe vendosa ta telefonoja personalisht. Asnjëherë nuk e dini, papritmas personi kishte arsye të mira për të marrë këtë vendim. Do të ishte më mirë të mos telefononi. Nuk kishte arsye, por kishte shumë paaftësi dhe mungesë të njohurive bazë.

Ai me marrëzi u përpoq të justifikohej, dhe pyetjet e mia shkaktuan vetëm habi. Imagjinoni, ai më tha që programi nuk përdor asnjë tabelë. Gjithçka ruhet në një skedar të vetëm. Këto fjalë vranë plotësisht copat e besimit tek unë për një rezultat pozitiv. Ishte ai që më tregoi për FireBird.

Meqenëse gjithçka ruhet në një skedar dhe programi nuk mund ta "lexojë" këtë skedar, atëherë thjesht duhet të ktheheni te kopje e vjetër. Pse të përpiqeni të kuptoni problemin dhe të paktën ta hiqni atë? informacion i rendesishem direkt nga tabelat? Nuk kishte kuptim të vazhdonim më tej bisedën. Specialisti thjesht vrau punën e njerëzve me një goditje në gjysmë muaji dhe mori një shpërblim.

Nëse organizata juaj nuk është gati të punësojë një specialist të IT-së me kohë të plotë, atëherë ju rekomandoj fuqimisht që të kujdeseni për dokumentimin e strategjisë suaj për ndërveprim me një person që vjen. Është e nevojshme të vendosë përgjegjësitë e tij në letër dhe të ketë një listë të objekteve të infrastrukturës për të cilat ai është përgjegjës.

Kjo nuk do t'ju shpëtojë nga problemet, por do t'ju japë mirëkuptim i qartë, çfarë bën një person dhe cilat fusha të punës së tij kërkojnë vëmendje të shtuar. Për shembull, nëse nuk e kuptoni IT, dhe kompania juaj ka baza të dhënash nga të cilat varet jeta e organizatës, atëherë mos kurseni në blerjen e një programi profesional rezervë. Lëreni specialistin vizitues ta konfigurojë dhe do të merrni raporte ditore me email për rezultatet e rezervimit.

Nuk ishte rastësi që fillova të flas software, sepse në praktikë, ndjeva se jo të gjithë specialistët e IT janë gati të automatizojnë procesin e rezervimit. Ata ose marrin përgjegjësinë për krijimin e kopjeve vetë, ose thjesht luajnë ruletë ruse. Si rezultat, humbësi i vetëm nga kjo situatë jeni ju, drejtuesi i kompanisë.

05/22/06 83.2K

A keni dashur ndonjëherë të instaloni një formular reagimi në faqen tuaj të internetit? Me siguri keni hasur në skenarë të ngjashëm. Mjaft e çuditshme, skriptet e gatshme për dërgimin e një formulari me email janë shumë të njohura (mund ta shihni këtë në çdo arkiv të skripteve), dhe ka shumë prej tyre. Ka të thjeshta në të cilat asgjë nuk ndryshon, dhe ka të ndërlikuara sisteme të mëdha, të cilat funksionojnë në mysql, ju lejojnë të ndryshoni dinamikisht çdo fushë, përmbajnë një sërë cilësimesh... Por a janë vërtet të nevojshme ato? Sipas mendimit tim, nevoja për sisteme të tilla është shumë e dyshimtë.

Nuk do të mund të provoni dërgimin e postës në kompjuterin tuaj të shtëpisë. Për ta bërë këtë, ju duhet hosting me mbështetje PHP dhe funksionet e dërgimit të postës. Unë ju rekomandoj ofruesin e pritjes runweb.ru. Ky ofrues ofron tarifa të shkëlqyera, shpejtësia më e lartë akses dhe shërbim i shkëlqyer.

Metodat e dërgimit të postës

Dërgo postë nga serveri me duke përdorur php mund të bëhet në dy mënyra kryesore.
Dua t'i shikoj të dyja këto metoda me radhë.

E para dhe më e thjeshta është duke përdorur php funksionet e postës(). Funksioni është shumë i thjeshtë dhe i drejtpërdrejtë, megjithëse dërgon postë nga duke përdorur postën() gjithashtu ka një sërë disavantazhesh. Gjëja më e rëndësishme është që letra të dërgohet jo drejtpërdrejt, por përmes PHP. Njëkohësisht program php fut disa nga fushat e tij në shkronjë. Për shembull, nuk do të jeni në gjendje të tregoni saktë dërguesin. Në shumicën e rasteve, fusha "nga" (d.m.th. nga kush erdhi letra) do të përmbajë emrin e serverit. Puna është se PHP fut titujt e saj në linjën e shërbimit të shkronjës "nga".

Megjithatë, dërgimi i postës duke përdorur funksionin mail() mbetet më i thjeshtë
mënyra për të dërguar një letër nga serveri. Le ta shohim këtë metodë në më shumë detaje.

Funksioni mail() ka sintaksën e mëposhtme:

mail ($to, $subject, $body, $headers);

$to është adresa e marrësit. Për shembull, " [email i mbrojtur]". $subject - tema e letrës. Për shembull, "Ju keni marrë një letër." $body - teksti i mesazhit. $headers - çdo titull i letrës. Për shembull, adresa e dërguesit do të duket si kjo : "nga: [email i mbrojtur]".

Këtu shembull i plotë dërgimi i postës duke përdorur postën ():

postë (" [email i mbrojtur]", "Subjekti i letrës", "Përshëndetje! nKeni marrë një letër.", "nga: emri i faqes");

Ju lutemi vini re se kur përdorni këtë funksion në një kompjuter shtëpiak, mund të shkaktojë një gabim sepse nuk mund të dërgojë një email pa një server poste.

Tani le të shohim se si mund të dërgoni një email duke përdorur sendmail.

sendmail është program standard salla e operacionit sistemet unix, e cila dërgon postë.
php mund të ekzekutojë programe unix duke përdorur mjetin tuba. Ky mjet unix ju lejon të dërgoni të dhëna nga një program në tjetrin, ngjashëm me mënyrën se si shkruajmë në një skedar. Vetëm skedari në këtë rast është programi (në veçanti, sendmail), i cili merr të dhënat.

Programi sendmail ka shumë parametra, ne do të përdorim disa prej tyre. Për të përdorur sendmail, duhet të hapni një tub për të. Në php kjo bëhet duke përdorur komandën popen(), e cila është identike në sintaksë me komandën fopen(). Duke përdorur popen() hapim një transmetim për dërgimin e postës
për të shkruar në të (kujtoni parametrin e modalitetit "w"?), pas së cilës mund t'i dërgoni të dhëna me komandën e zakonshme fputs(). Le të shohim se si duket procedura e plotë për dërgimin e një letre përmes sendmail:

Në këtë program, gjëja e parë që bëjmë është të përshkruajmë kokat rfc. rfc janë fusha shërbimi që përmbajnë të gjithë informacionin rreth letrës. Ju mund të shihni një shembull të rfc, për shembull, në Programi bat! duke klikuar me të djathtën mbi tekstin e letrës dhe duke zgjedhur “rfc-822 headers” (emri i artikullit mund të ndryshojë). Për t'i hequr ato, përsëritni hapat. Në kokë ne përshkruajmë fushat "lloji i përmbajtjes", të cilat tregojnë se shkronja është tekst dhe kodimi në Windows-1251 (standarde kodimi i Windows). "koi8-r" mund të përdoret gjithashtu si një kodim, ky është një kodim standard unix. Në këtë artikull ne nuk do të shqyrtojmë në detaje titujt e mundshëm rfc. Do ta bëjmë pak më vonë,
kur i afrohemi më shumë punës me postën. Pra, pasi kemi përshkruar variablat e shërbimit dhe titujt e shkronjave, hapim sendmail. Kushtojini vëmendje shtegut të programit "/usr/sbin/sendmail". Aktiv serverë të ndryshëm mund të ndryshojë!
Nëse kjo linjë nuk funksionon, pyesni ISP-në tuaj se ku ndodhet sendmail. Parametrat e mëposhtëm janë specifikuar: "-i -f$from - $recipients". Këto janë parametra standardë për dërgimin e një letre dhe dy fusha janë futur në to: $from - nga kush, $recipients - adresat e marrësit. Në rastin tonë, ndryshorja $recipients përmban vetëm një adresë. Në fakt, ju mund të përdorni adresa të shumta, të ndara nga një hapësirë:

$recipients = " [email i mbrojtur] [email i mbrojtur] [email i mbrojtur]";

Më pas, ne fillimisht shkruajmë kokat e mesazhit në rrjedhë (ndryshorja $text_headers), më pas i ndajmë ato me një ndërprerje rreshti dhe shkruajmë tekstin e mesazhit. Hapi i fundit— mbyllja e transmetimit dhe kontrollimi për gabime. Nëse ekzekutohet saktë, në variablin $result vendoset një zero dhe nëse ndodh një gabim, numri i gabimit shkruhet në të.

Tani le të shohim një shembull të përdorimit të aftësive të dërgimit të postës. Për ta bërë këtë, ne do të krijojmë një formular reagimi që mund ta instaloni në faqen tuaj të internetit. Ne do të përdorim sendmail si metodë për dërgimin e një letre.

Krijimi i një formulari reagimi

Formulari ynë i komenteve do të jetë një skenar. Ky skript do të shfaqë formularin dhe do të dërgojë emailin.

contact.php:

Feedback

Komunikimi i drejtpërdrejtë
Emri juaj: *
Email juaj: *
Faqja juaj e internetit:
Mesazhi juaj: *

Fushat e shënuara me yll (*) duhet të plotësohen.

Tani le të shohim se si funksionon ky program. Ekzekutimi fillon me rreshtin "if (!$a) show_form();", pasi para kësaj është specifikuar një funksion, i cili, natyrisht, nuk ekzekutohet. Në këtë rresht kontrollojmë nëse ka pasur përpjekje për të plotësuar formularin (nga formulari, siç mund ta shihni, kalohet ndryshorja $a, e cila kontrollohet në këtë rresht). Nëse nuk është bërë një përpjekje e tillë, thirret funksioni show_form() i cili shfaq formën.

Shumë njerëz fillojnë të shkruajnë një projekt për të punuar me një detyrë të vetme, duke mos nënkuptuar se ai mund të rritet në një sistem menaxhimi me shumë përdorues, për shembull, përmbajtje ose, Zoti na ruajt, prodhim. Dhe gjithçka duket e mrekullueshme dhe e lezetshme, gjithçka funksionon, derisa të filloni të kuptoni se kodi që është shkruar përbëhet tërësisht nga paterica dhe kod i fortë. Kodi është i përzier me paraqitje, pyetje dhe paterica, ndonjëherë edhe i palexueshëm. Shfaqet një problem urgjent: kur shtoni veçori të reja, duhet të ndërhyni me këtë kod për një kohë shumë të gjatë, duke kujtuar "çfarë ishte shkruar atje?" dhe mallkoni veten në të kaluarën.

Ju madje mund të keni dëgjuar për modelet e dizajnit dhe madje të keni shfletuar këto libra të mrekullueshëm:

  • E. Gamma, R. Helm, R. Johnson, J. Vlissides “Teknikat e projektimit të orientuara nga objekti. Modelet e Dizajnit";
  • M. Fowler "Architecture of Enterprise Software Applications."
Dhe shumë, të patrembur nga manualet dhe dokumentacioni i madh, u përpoqën të studionin ndonjë nga kornizat moderne dhe, të përballur me kompleksitetin e të kuptuarit (për shkak të pranisë së shumë koncepteve arkitekturore të lidhura me zgjuarsi me njëri-tjetrin), e shtynë studimin dhe përdorimin e mjete moderne "në pjesën e pasme të ndezjes".

Ky artikull do të jetë i dobishëm kryesisht për fillestarët. Gjithsesi, shpresoj që pas disa orësh të keni një ide Implementimet MVC model që qëndron në themel të të gjitha kornizave moderne të internetit, dhe gjithashtu merrni "ushqim" për reflektim të mëtejshëm mbi "si ta bëjmë atë". Në fund të artikullit ka një përzgjedhje lidhjesh të dobishme që do t'ju ndihmojnë gjithashtu të kuptoni se nga çfarë përbëhen kornizat e internetit (përveç MVC) dhe si funksionojnë ato.

Programuesit me përvojë të PHP-së nuk kanë gjasa të gjejnë ndonjë të re për veten e tyre në këtë artikull, por komentet dhe komentet e tyre në tekstin kryesor do të ishin shumë të dobishme! Sepse Pa teori, praktika është e pamundur, dhe pa praktikë, teoria është e kotë, pastaj së pari do të ketë pak teori dhe pastaj do të kalojmë në praktikë. Nëse tashmë jeni njohur me konceptin MVC, mund të kaloni seksionin e teorisë dhe të shkoni direkt në praktikë.

1. Teoria Modeli MVC përshkruan një mënyrë të thjeshtë për të strukturuar një aplikacion, qëllimi i së cilës është të ndajë logjikën e biznesit nga ndërfaqja e përdoruesit. Si rezultat, aplikacioni është më i lehtë për t'u shkallëzuar, testuar, mirëmbajtur dhe, natyrisht, zbatuar.

Le të shohim diagramin konceptual të modelit MVC (për mendimin tim, ky është diagrami më i suksesshëm që kam parë):

Në arkitekturën MVC, modeli siguron të dhënat dhe rregullat e logjikës së biznesit, pamja është përgjegjëse për ndërfaqen e përdoruesit dhe kontrolluesi siguron ndërveprimin midis modelit dhe pamjes.

Një rrjedhë tipike e një aplikacioni MVC mund të përshkruhet si më poshtë:

  • Kur një përdorues viziton një burim në internet, skripti i inicializimit krijon një shembull të aplikacionit dhe e nis atë për ekzekutim.
    Kjo tregon një pamje të, të themi, faqes kryesore të faqes.
  • Aplikacioni merr një kërkesë nga përdoruesi dhe përcakton kontrolluesin dhe veprimin e kërkuar. Në rastin e faqes kryesore, kryhet veprimi i paracaktuar ( indeks).
  • Aplikacioni instancon kontrolluesin dhe ekzekuton metodën e veprimit,
    e cila, për shembull, përmban thirrje modele që lexojnë informacion nga baza e të dhënave.
  • Pas kësaj, veprimi krijon një pamje me të dhënat e marra nga modeli dhe i shfaq rezultatin përdoruesit.
  • Modeli - përmban logjikën e biznesit të aplikacionit dhe përfshin metoda për marrjen e mostrave (këto mund të jenë metoda ORM), përpunim (për shembull, rregullat e vlefshmërisë) dhe sigurimin e të dhënave specifike, gjë që shpesh e bën atë shumë të trashë, gjë që është krejt normale.
    Modeli nuk duhet të ndërveprojë drejtpërdrejt me përdoruesin. Të gjitha variablat që lidhen me kërkesën e përdoruesit duhet të përpunohen në kontrollues.
    Modeli nuk duhet të gjenerojë HTML ose kod tjetër ekrani që mund të ndryshojë në varësi të nevojave të përdoruesit. Një kod i tillë duhet të përpunohet në pamje.
    I njëjti model, për shembull: modeli i vërtetimit të përdoruesit mund të përdoret si në pjesën e përdoruesit ashtu edhe në atë administrative të aplikacionit. Në këtë rast, mund të vendosni kodin e përgjithshëm klasë të veçantë dhe të trashëgojë prej tij, duke përcaktuar metoda specifike për nën-aplikimin në pasardhësit e tij.

    Pamje - përdoret për të specifikuar shfaqjen e jashtme të të dhënave të marra nga kontrolluesi dhe modeli.
    Pamjet përmbajnë shënime HTML dhe futje të vogla të kodit PHP për të përshkuar, formatuar dhe shfaqur të dhënat.
    Nuk duhet të hyjë drejtpërdrejt në bazën e të dhënave. Kjo është ajo që duhet të bëjnë modelet.
    Nuk duhet të funksionojë me të dhënat e marra nga një kërkesë e përdoruesit. Kjo detyrë duhet të kryhet nga kontrolluesi.
    Mund të aksesojë drejtpërdrejt vetitë dhe metodat e një kontrolluesi ose modeli për të marrë të dhëna të gatshme për dalje.
    Pamjet zakonisht ndahen në një shabllon të përbashkët, që përmban shënjimin e përbashkët për të gjitha faqet (për shembull, një kokë dhe fund) dhe pjesë të shabllonit që përdoren për të shfaqur daljen e të dhënave nga modeli ose për të shfaqur formularët e futjes së të dhënave.

    Kontrolluesi është ngjitësi që lidh modelet, pamjet dhe komponentët e tjerë aplikim pune. Kontrolluesi është përgjegjës për përpunimin e kërkesave të përdoruesve. Kontrolluesi nuk duhet të përmbajë pyetje SQL. Është më mirë t'i mbani ato në modele. Kontrolluesi nuk duhet të përmbajë HTML ose shënime të tjera. Ia vlen të merret në sy.
    Në një aplikacion MVC të dizajnuar mirë, kontrollorët janë zakonisht shumë të hollë dhe përmbajnë vetëm disa dhjetëra rreshta kodi. Çfarë nuk mund të thuhet për Kontrollorët Stupid Fat (SFC) në CMS Joomla. Logjika e kontrolluesit është mjaft tipike dhe shumica e saj transferohet në klasat bazë.
    Modelet, përkundrazi, janë shumë të trasha dhe përmbajnë pjesën më të madhe të kodit që lidhet me përpunimin e të dhënave, sepse struktura e të dhënave dhe logjika e biznesit të përfshira në të janë zakonisht mjaft specifike për një aplikacion të caktuar.

    1.1. Kontrolluesi i përparmë dhe kontrolluesi i faqes Në shumicën e rasteve, ndërveprimi i përdoruesit me një aplikacion ueb ndodh duke klikuar në lidhje. Shikoni tani në shiritin e adresave të shfletuesit tuaj - e keni marrë këtë tekst nga kjo lidhje. Lidhje të tjera, si ato në anën e djathtë të kësaj faqeje, do t'ju ofrojnë përmbajtje të ndryshme. Kështu, lidhja përfaqëson një komandë specifike për aplikacionin në internet.

    Shpresoj se e keni vënë re tashmë se vende të ndryshme mund të kenë formate ndërtimi krejtësisht të ndryshme shiriti i adresave. Çdo format mund të shfaqë arkitekturën e një aplikacioni ueb. Edhe pse kjo nuk është gjithmonë kështu, në shumicën e rasteve është një fakt i qartë.

    Le të shqyrtojmë dy opsione për shiritin e adresave, të cilat shfaqin një tekst dhe një profil përdoruesi.

    Kodi i përafërt i përpunimit në këtë rast:
    switch($_GET["veprim"]) ( case "about" : request_once ("about.php"); // "Rreth nesh" ndërprerje e faqes; rasti "contacts" : require_once ("contacts.php"); // Ndarja e faqes "Kontaktet"; rasti "feedback" : require_once("feedback.php"); // Ndërprerja e faqes "Përgjigje"; parazgjedhja: require_once ("page404.php"); // ndërprerja e faqes "404"; )
    Unë mendoj se pothuajse të gjithë e kanë bërë këtë më parë.

    Duke përdorur një motor kursimi URL, mund të konfiguroni aplikacionin tuaj që të pranojë kërkesa si kjo për të shfaqur të njëjtin informacion:
    http://www.example.com/contacts/feedback

    Këtu kontaktet përfaqësojnë kontrolluesin, dhe reagimi është metoda e kontrolluesit të kontakteve që shfaq formularin e reagimit, etj. Kësaj çështjeje do t'i kthehemi në pjesën praktike.

    Vlen gjithashtu të dihet se shumë rutera të kornizave të internetit ju lejojnë të krijoni rrugë të personalizuara URL (specifikoni se çfarë do të thotë secila pjesë e URL-së) dhe rregullat për përpunimin e tyre.
    Tani kemi njohuri të mjaftueshme teorike për të kaluar në praktikë.

    2. Praktikoni Së pari, le të krijojmë strukturën e skedarit dhe dosjes së mëposhtme:


    Duke parë përpara, do të them se klasat kryesore Model, View dhe Controller do të ruhen në dosjen kryesore.
    Fëmijët e tyre do të ruhen në drejtoritë e kontrollorëve, modeleve dhe pamjeve. Skedari index.php është pika hyrëse në aplikacion. Skedari bootstrap.php fillon ngarkimin e aplikacionit, duke lidhur të gjitha modulet e nevojshme, etj.

    Ne do të shkojmë në mënyrë sekuenciale; Le të hapim skedarin index.php dhe ta plotësojmë me kodin e mëposhtëm:
    ini_set ("gabimet_afishimi", 1); require_once "application/bootstrap.php";
    Këtu nuk duhet të ketë pyetje.

    Tjetra, le të shkojmë menjëherë te skedari bootstrap.php:
    request_once "core/model.php"; request_once "core/view.php"; request_once "core/controller.php"; request_once "core/route.php"; Rruga::start(); //nisni ruterin
    Tre linjat e para do të lidhen tani për tani skedarë që nuk ekzistojnë bërthamat. Rreshtat e fundit përfshijnë skedarin me klasën e ruterit dhe e nisin atë për ekzekutim duke thirrur metodën statike të fillimit.

    2.1. Zbatimi i një ruteri URL Le të devijojmë nga zbatimi tani për tani Modeli MVC dhe le të bëjmë rrugëzimin. Hapi i parë që duhet të bëjmë është të shkruajmë kodin e mëposhtëm në .htaccess:
    RewriteEngine në RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule .* index.php [L]
    Ky kod do të ridrejtojë të gjithë përpunimin e faqeve në index.php, që është ajo që na nevojitet. Ju kujtohet në pjesën e parë që folëm për Front Controller?!

    Ne do të vendosim rrugëzimin në skedar të veçantë route.php në direktorinë kryesore. Në këtë skedar do të përshkruajmë klasën Route, e cila do të ekzekutojë metodat e kontrolluesit, të cilat nga ana tjetër do të gjenerojnë pamjen e faqes.

    Përmbajtja e skedarit route.php

    class Route ( funksioni statik start() ( // kontrolluesi dhe veprimi i paracaktuar $controller_name = "Kryesore"; $action_name = "index"; $routes = shpërthejë ("/", $_SERVER["REQUEST_URI"]); // merrni emri i kontrolluesit nëse (!empty($routes)) ( $controller_name = $routes; ) // merrni emrin e veprimit nëse (!empty($routes)) ( $action_name = $routes; ) // shtoni prefikset $model_name = " Model_".$controller_name; $controller_name = "Controller_".$controller_name; $action_name = "action_".$action_name; // lidh skedarin me klasën e modelit (mund të mos ketë skedar modeli) $model_file = strtolower ($model_name). ".php"; $model_path = "application/models/".$model_file; if(file_exists($model_path)) (përfshi "application/models/".$model_file;) // lidh skedarin me klasën e kontrolluesit $controller_file = strtolower ($controller_name)..php"; $controller_path = "application/controllers/".$controller_file; if(file_exists($controller_path)) (përfshi "application/controllers/".$controller_file; ) else ( /* do të ishte e saktë të hedhim një përjashtim këtu, por për të thjeshtuar gjërat, ne do të ridrejtojmë menjëherë në faqen 404 */ Route::ErrorPage404(); ) // krijojmë një kontrollues $controller = i ri $controller_name ; $veprim = $action_name; if(method_exists($controller, $action)) ( // thirrni veprimin e kontrolluesit $controller->$action(); ) tjetër ( // këtu do të ishte gjithashtu më e mençur të hidhej një përjashtim Route::ErrorPage404(); ) ) funksioni ErrorPage404( ) ( $host = "http://".$_SERVER["HTTP_HOST"]."/"; header("HTTP/1.1 404 Nuk u gjet"); header("Statusi: 404 Nuk u gjet") ; header (" Vendndodhja:".$host."404"); ) )


    Unë vërej se klasa zbaton logjikë shumë të thjeshtuar (pavarësisht kodit voluminoz) dhe madje mund të ketë probleme sigurie. Kjo është bërë qëllimisht, sepse... Shkrimi i një klase të plotë rrugëtimi meriton të paktën një artikull të veçantë. Le të shohim pikat kryesore ...

    Elementi i grupit global $_SERVER["REQUEST_URI"] përmban adresën e plotë me të cilën kontaktoi përdoruesi.
    Për shembull: shembull.ru/contacts/feedback

    Duke përdorur funksionin shpërthejnë Adresa është e ndarë në komponentë. Si rezultat, marrim emrin e kontrolluesit, për shembullin e dhënë, ky është kontrolluesi kontaktet dhe emri i veprimit, në rastin tonë - reagime.

    Më pas, skedari i modelit (modeli mund të mungojë) dhe skedari i kontrolluesit, nëse ka, janë të lidhur dhe më në fund, krijohet një shembull i kontrolluesit dhe veprimi thirret, përsëri, nëse është përshkruar në klasën e kontrolluesit.

    Kështu, kur shkoni në, për shembull, adresën:
    shembull.com/portfolio
    ose
    shembull.com/portfolio/index
    Ruteri do të kryejë veprimet e mëposhtme:

  • do të përfshijë skedarin model_portfolio.php nga dosja modele, që përmban klasën Model_Portfolio;
  • do të përfshijë skedarin controller_portfolio.php nga dosja e kontrollorëve, që përmban klasën Controller_Portfolio;
  • do të krijojë një shembull të klasës Controller_Portfolio dhe do të thërrasë veprimin e paracaktuar - action_index, të përshkruar në të.
  • Nëse përdoruesi përpiqet të hyjë në adresën e një kontrolluesi që nuk ekziston, për shembull:
    shembull.com/ufo
    atëherë ai do të ridrejtohet në faqen "404":
    shembull.com/404
    E njëjta gjë do të ndodhë nëse përdoruesi i qaset një veprimi që nuk është përshkruar në kontrollues.2.2. Le të kthehemi te zbatimi MVC Le të shkojmë te dosja kryesore dhe të shtojmë tre skedarë të tjerë në skedarin route.php: model.php, view.php dhe controller.php


    Më lejoni t'ju kujtoj se ato do të përmbajnë klasa bazë, të cilat tani do të fillojmë t'i shkruajmë.

    Përmbajtja e skedarit model.php
    Modeli i klasës (funksioni publik get_data() ( ) )
    Klasa e modelit përmban një metodë të vetme të marrjes së të dhënave boshe, e cila do të anashkalohet në klasat pasardhëse. Kur të krijojmë klasa pasardhëse, gjithçka do të bëhet më e qartë.

    Përmbajtja e skedarit view.php
    class View ( //public $template_view; // këtu mund të specifikoni pamjen e përgjithshme të parazgjedhur. funksioni gjeneron($content_view, $template_view, $data = null) ( /* if(is_array($data)) ( // konverto grupin elementet në variabla ekstrakt ($data); ) */ përfshijnë "application/views/".$template_view; ) )
    Nuk është e vështirë të merret me mend se metoda gjenerojnë synon të formojë një pamje. Parametrat e mëposhtëm i kalohen asaj:

  • $content_file - pamje që shfaqin përmbajtjen e faqes;
  • $template_file - shabllon i zakonshëm për të gjitha faqet;
  • $data është një grup që përmban elementë të përmbajtjes së faqes. Zakonisht plotësohet në model.
  • Funksioni i përfshirjes lidh në mënyrë dinamike një shabllon të përgjithshëm (pamje) brenda të cilit do të futet pamja
    për të shfaqur përmbajtjen e një faqeje të caktuar.

    Në rastin tonë, shablloni i përgjithshëm do të përmbajë kokën, menunë, shiritin anësor dhe fundin, dhe përmbajtja e faqeve do të përmbahet në formë të veçantë. Përsëri, kjo është bërë për thjeshtësi.

    Përmbajtja e skedarit controller.php
    Kontrolluesi i klasës ( $model publik; $view publik; funksioni __construct() ( $this->view = New View(); ) funksioni action_index() ( ) )
    Metoda indeksi_aksioni- ky është një veprim i quajtur si parazgjedhje; ne do ta anashkalojmë atë kur zbatojmë klasa pasardhëse.

    2.3. Zbatimi i klasave pasardhësit e Modelit dhe Controller, duke krijuar View "s Tani fillon argëtimi! Uebfaqja jonë e kartës së biznesit do të përbëhet nga faqet e mëposhtme:
  • në shtëpi
  • Shërbimet
  • Portofoli
  • Kontaktet
  • Dhe gjithashtu - faqja "404".
  • Çdo faqe ka kontrolluesin e vet nga dosja e kontrollorëve dhe një pamje nga dosja e shikimeve. Disa faqe mund të përdorin një model ose modele nga dosja e modeleve.


    Në figurën e mëparshme, skedari template_view.php është theksuar veçmas - ky është një shabllon që përmban shënime të zakonshme për të gjitha faqet. Në rastin më të thjeshtë mund të duket kështu:
    në shtëpi
    Për t'i dhënë faqes një pamje të paraqitshme, ne projektojmë shabllon CSS dhe ta integrojmë në faqen tonë të internetit duke ndryshuar strukturën e shënjimit HTML dhe Lidhjet CSS dhe skedarët JavaScript:

    Në fund të artikullit, në seksionin "Rezultati", ekziston një lidhje me një depo GitHub me një projekt në të cilin janë ndërmarrë hapa për të integruar një shabllon të thjeshtë.

    2.3.1. Ne krijojmë faqja kryesore Le të fillojmë me kontrolluesin controller_main.php, këtu është kodi i tij:
    class Controller_Main zgjeron Controller ( funksioni action_index() ( $this->view->generate("main_view.php", "template_view.php"); ) )
    Në metodë gjenerojnë kalohen një shembull i klasës View, emrat e skedarëve të shabllonit të përgjithshëm dhe pamjes me përmbajtjen e faqes.
    Përveç veprimit të indeksit, kontrolluesi sigurisht që mund të përmbajë veprime të tjera.

    Ne shqyrtuam skedarin e pamjes së përgjithshme më parë. Konsideroni skedarin e përmbajtjes main_view.php:
    Mirë se vini!

    OLOLOSHA TEAM është një ekip specialistësh të klasit të parë në fushën e zhvillimit të faqeve të internetit me përvojë shumëvjeçare në mbledhjen e maskave meksikane, statujave prej bronzi dhe guri nga India dhe Ceiloni, basorelieve dhe skulptura të krijuara nga mjeshtra të Afrikës Ekuatoriale pesë ose gjashtë shekuj. më parë...


    Kjo përmban shënime të thjeshta pa asnjë thirrje PHP.
    Për të shfaqur faqen kryesore, mund të përdorni një nga adresat e mëposhtme:

    Ne do të shqyrtojmë një shembull duke përdorur një pamje që shfaq të dhënat e marra nga modeli më poshtë.

    2.3.2. Krijoni një faqe "Portofoli" Në rastin tonë, faqja "Portofoli" është e vetmja faqe që përdor modelin.
    Modeli zakonisht përfshin metodat e kampionimit të të dhënave, për shembull:
  • metodat e bibliotekave amtare pgsql ose mysql;
  • metodat e bibliotekave që zbatojnë abstraksionin e të dhënave. Për shembull, metodat e bibliotekës PEAR MDB2;
  • metodat ORM;
  • metodat për të punuar me NoSQL;
  • dhe etj.
  • Për thjeshtësi, ne nuk do të përdorim pyetje SQL ose deklarata ORM këtu. Në vend të kësaj, ne do të imitojmë të dhëna reale dhe do të kthejmë menjëherë një sërë rezultatesh.
    Vendosni skedarin e modelit model_portfolio.php në dosje modelesh. Ja përmbajtja e tij:
    class Model_Portfolio zgjeron Modelin ( funksioni publik get_data() ( return array("Year" => "2012", "Site" => "http://DunkelBeer.ru", "Description" => "Sajti promovues i birra e errët Dunkel nga prodhuesi gjerman Löwenbraü prodhuar në Rusi nga kompania e birrës "SUN InBev."), array("Viti" => "2012", "Site" => "http://ZopoMobile.ru", "Përshkrimi " => "Katalogu në gjuhën ruse Telefonat kinezë Kompania Zopo në Bazuar në Android OS dhe aksesorë për ta."), // todo); ))

    Klasa e kontrolluesit të modelit gjendet në skedarin controller_portfolio.php, këtu është kodi i tij:
    class Controller_Portfolio zgjeron Controller ( funksioni __construct() ( $this->model = new Model_Portfolio(); $this->view = new View(); ) funksioni action_index() ( $data = $this->model->get_data( ); $this->view->generate("portfolio_view.php", "template_view.php", $data); ) )
    Tek një ndryshore të dhëna shkruhet vargu i kthyer nga metoda merrni_të dhënat të cilën e pamë më herët.
    Kjo ndryshore më pas kalohet si parametër i metodës gjenerojnë, i cili gjithashtu përmban: emrin e skedarit me shabllonin e përgjithshëm dhe emrin e skedarit që përmban pamjen me përmbajtjen e faqes.

    Pamja që përmban përmbajtjen e faqes është në skedarin portfolio_view.php.
    Portofoli

    Të gjitha projektet në tabelën e mëposhtme janë fiktive, ndaj as mos u përpiqni të ndiqni lidhjet e dhëna.
    vitiProjektiPërshkrim


    Gjithçka është e thjeshtë këtu, pamja shfaq të dhënat e marra nga modeli.

    2.3.3. Krijimi i faqeve të mbetura Faqet e mbetura krijohen në të njëjtën mënyrë. Kodi i tyre është i disponueshëm në depon e GitHub, një lidhje për të cilën është dhënë në fund të artikullit, në seksionin "Rezultati".3. Rezultati Ja çfarë ndodhi në fund:

    Pamja e ekranit të faqes së internetit të kartës së biznesit që rezulton



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

    Por në këtë version unë skicova klasat e mëposhtme (dhe llojet e tyre përkatëse):

    • Controller_Login në të cilin krijohet një pamje me një formular për futjen e hyrjes dhe fjalëkalimit, pas plotësimit të të cilit kryhet procedura e vërtetimit dhe, nëse është e suksesshme, përdoruesi ridrejtohet në panelin e administratorit.
    • Contorller_Admin me një veprim indeksi që kontrollon nëse përdoruesi ishte autorizuar më parë në sajt si administrator (nëse po, shfaqet pamja e panelit të administratorit) dhe një veprim daljeje për dalje.
    Autentifikimi dhe autorizimi është një temë tjetër, kështu që nuk diskutohet këtu, por është dhënë vetëm lidhja e dhënë më lart në mënyrë që të keni diçka për të filluar.4. Përfundim Modeli MVC përdoret si bazë arkitekturore në shumë korniza dhe CMS që janë krijuar për të qenë në gjendje të zhvillojnë zgjidhje cilësore më komplekse në një periudhë më të shkurtër kohore. Kjo u bë e mundur duke rritur nivelin e abstraksionit, pasi ka një kufi në kompleksitetin e strukturave me të cilat mund të operojë truri i njeriut.

    Por, përdorimi i kornizave të uebit si Yii ose Kohana, të përbërë nga disa qindra skedarë, gjatë zhvillimit të aplikacioneve të thjeshta në internet (për shembull, faqet e kartave të biznesit) nuk është gjithmonë i këshillueshëm. Tani mund të krijojmë një model të bukur MVC në mënyrë që të mos përziejmë Php, Html, CSS dhe Kodi JavaScript në një skedar.

    Ky artikull është më shumë një pikënisje për të mësuar CMF sesa një shembull i diçkaje vërtet të saktë që mund ta përdorni si bazë për aplikacionin tuaj në internet. Ndoshta ju ka frymëzuar dhe tashmë po mendoni të shkruani mikrokornizën tuaj ose CMS bazuar në MVC. Por, përpara se të rishpikni rrotën tjetër me “blackjack dhe kurva”, mendoni sërish: ndoshta do të ishte më e arsyeshme t'i drejtonit përpjekjet tuaja drejt zhvillimit dhe ndihmës së komunitetit të një projekti tashmë ekzistues?!

    P.S.: Artikulli u rishkrua duke marrë parasysh disa komente të lëna në komente. Kritikat doli të ishin shumë të dobishme. Duke gjykuar nga përgjigja: komentet, PM-të dhe numri i përdoruesve që e shtuan postimin në të preferuarat, ideja për të shkruar këtë postim doli të ishte jo aq e keqe. Fatkeqësisht, nuk është e mundur të merren parasysh të gjitha dëshirat dhe të shkruhet gjithnjë e më në detaje për shkak të mungesës së kohës. Suksese me projektet tuaja!

    5. Një përzgjedhje e lidhjeve të dobishme për këtë temë Artikulli shumë shpesh prek temën e kornizave të internetit - kjo është një temë shumë e gjerë, sepse edhe mikrokornizat përbëhen nga shumë komponentë të ndërlidhur në mënyrë të zgjuar dhe do të duhej më shumë se një artikull për të folur për këto komponentët. Megjithatë, vendosa të sjell këtu përzgjedhje e vogël lidhje (të cilat ndoqa kur shkruaja këtë artikull) që në një mënyrë ose në një tjetër lidhen me temën e kornizave.

    Etiketa: Shtoni etiketa

    Ky tutorial do t'ju tregojë se si të krijoni formularin më të thjeshtë të kontaktit për një shabllon HTML.

    Para së gjithash, krijoni 2 skedarë: contact_form.html dhe contact.php. Skedari i parë do të përmbajë kodin për formularin tuaj të kontaktit dhe i dyti do të përpunojë të dhënat nga ky formular.

    HTML

    Më poshtë është një shembull i kodit HTML të formularit të kontaktit:

    Emri juaj

    E-mail-i juaj

    Mesazh

    Në shfletues do të duket kështu:

    Le të hedhim një vështrim të shpejtë në aspektet kryesore të kësaj forme. Etiketa duhet të ketë 2 atribute shtesë:

    action="contact.php" - përcakton se ku të dërgohen të dhënat nga formulari i kontaktit pas dërgimit të letrës.

    metoda = "post" - përcakton se si të dërgohen të dhënat nga formulari i kontaktit në skedarin e specifikuar atribut veprimi. Etiketat duhet të kenë një atribut "emër" me një identifikues unik. Ky atribut përdoret për të identifikuar të dhënat e formularit të kontaktit pasi të jetë dërguar një email. Ekzistojnë gjithashtu 2 elementë shtesë për t'u shënuar që përdoren si butonat Submit dhe Clear, elementi i parë duhet të përcaktohet nga etiketa type="submit" dhe e dyta nga etiketa type="reset".

    Procedura për krijimin e një formulari kontakti është mjaft e thjeshtë.

    PHP

    Le të kalojmë në krijimin e një skedari contact.php që do të mbledhë të dhëna nga formulari i kontaktit, do t'i kompozojë ato në një mesazh dhe do ta dërgojë me email. Shkarkoni skedarin e përfunduar contact.php nga kjo lidhje. Më poshtë është kodi i skedarit me komente në seksionet kryesore të tij:

    Caktimi i të dhënave nga çdo fushë e formularit të kontaktit (cf_name, cf_email, cf_message) në variablat e mëposhtëm PHP ($cf_message, $field_email, $field_message) $field_name = $_POST["cf_name"]; $field_email = $_POST["cf_email"]; $field_message = $_POST["cf_message"];

    Funksioni $mail_to duhet të përmbajë emailin e pronarit të faqes, kjo është pikërisht adresa ku do të dërgohen mesazhet. Ju mund të specifikoni disa adresa në të njëjtën kohë Email, duke i ndarë me presje (për shembull, [email i mbrojtur], [email i mbrojtur])

    $mail_to = " [email i mbrojtur]";

    Subjekti i letrës që do të merrni:

    $subject = "Mesazhi nga një vizitor i sajtit " . $emri i fushës;

    Ndërtimi i një strukture mesazhi:

    $body_message = "Nga: ".$field_name."\n"; $body_message .= "E-mail: ".$field_email."\n"; $body_message .= "Mesazhi: ".$field_message;

    Ndërtimi i titujve të mesazheve:

    $headers = "Nga: $cf_email\r\n"; $headers .= "Përgjigju: $cf_email\r\n";

    Ne përcaktojmë funksionin mail() dhe ia caktojmë variablit $mail_status, i cili përdoret për të kontrolluar nëse letra është dërguar me sukses.

    $mail_status = mail($mail_to, $subject, $body_message, $headers);

    Nëse funksioni mail() ka sukses, atëherë përdorni kodin më poshtë:

    Nëse ($mail_status) ( ?> // Printoni një alarm mesazhi("Faleminderit për ty Mesazhi. Ne do t'ju kontaktojmë së shpejti."); // Ridrejtojeni në një faqe të sajtit. Ju gjithashtu mund të specifikoni URL-në e plotë, p.sh. http://template-help.com window.location = "contact_page.html"; // Printoni një alarm mesazhi ("Mesazhi dështoi. Ju lutemi dërgoni një email te [email i mbrojtur]"); // Ridrejtojeni në ndonjë faqe të sajtit. Ju gjithashtu mund të specifikoni URL-në e plotë, p.sh. http://template-help.com window.location = "contact_page.html";

    Ju mund të shkarkoni skedarë të gatshëm contact_form.html dhe contact.php

    Ndihem i pashpresë, kur duket se gjithçka është e pakuptimtë dhe nuk do të çojë në asgjë, në kolaps të jetës. Kjo ndjenjë kur dikush heq dorë dhe çdo mendim apo veprim i krijuar për të siguruar ose ndryshuar diçka, hidhet poshtë si e padobishme. Më shoqërohet një ndjenjë vetmie, kur duket se askush nuk ka nevojë për mua me problemet dhe hallet e mia.

    Më parë nuk kam bërë asgjë për ta bërë më të lehtë, por, përkundrazi, kam filluar të më vijë keq për veten, sepse ndihem keq, nuk dua asgjë dhe asgjë nuk më bën të lumtur.

    Sot merrem me disa aktivitete: për shembull, pastrimi i shtëpisë, luajtja e lojërave kompjuterike.

    Unë vetë jam kurioz se si jetohen ndjenjat, sepse ndoshta nuk di si t'i jetoj ato.

    Pashpresa.

    Vetëm një herë në jetën time kam përjetuar një ndjenjë të tillë!

    Isha rreth 15 vjeç.

    Gjatë vizitës time të radhës në një nga trajnimet, u mbusha me besim të fortë në aftësitë e mia, arrita suksese herë pas here...

    Dhe ja, një situatë, një detyrë me tre personazhe, po luhet një situatë... banale, siç më dukej atëherë.

    Për mua, pashpresa është mungesa e dëshirës për të bërë diçka, depresion i plotë dhe indiferenca ndaj gjithçkaje, depresion.

    Nuk dua ta jetoj këtë ndjenjë, sepse në këtë gjendje gjithçka pushon së qeni e rëndësishme për mua dhe unë heq dorë. Nuk ik dhe nuk e hesht.

    Më parë, thjesht kam jetuar me të dhe e kam përdorur, por tani e di që ka një rrugëdalje nga çdo situatë dhe Dielli do të më ndihmojë ta gjej. Nuk i kushtova vëmendje nëse isha i prirur t'ua bëja verbalisht ndjenjën e mungesës së shpresës tek njerëzit e tjerë, por definitivisht nuk e pranoj gjithmonë atë për veten time, megjithëse me kalimin e kohës bëhet e qartë. Dua të mësoj të shoh një rrugëdalje nga situatat në mënyrë që të mos shfaqen edhe mendimet se nuk ka rrugëdalje.

    Pashpresë është kur nuk shoh një rrugëdalje dhe dorëzohem, nuk dua të bëj asgjë, sepse nuk e shoh kuptimin në të, kur nuk ka shpresë, e cila, në teori, duhet të jetë i fundit për të vdekur.

    Unë definitivisht nuk dua ta jetoj këtë ndjenjë, por ka gjithmonë një rrugëdalje, njësoj si në narkomaninë, nga e cila nuk pashë rrugëdalje, por falë Forcave të Armatosura dhe njerëzve që ma treguan. sot jam esëll, me Zotin, me ty. Pashpresa është një ndjenjë e vështirë, përpiqem të delegoj dhe të gjej një rrugëdalje, sepse nuk ka situata të pashpresa. Besimi ndihmon shumë. Tani e di që të pranosh një situatë është e pashpresë do të thotë të heqësh dorë dhe të mos bësh asgjë, ndaj mos ji pesimist. Në çdo negativ mund të gjeni një pozitiv - ka një rrugëdalje nga çdo situatë e pashpresë.

    Artikujt më të mirë mbi këtë temë