Noțiuni de bază cu Cadrul PHP pentru combustibil

Acest tutorial din două părți vă va face să funcționeze cu frameworkul Fuel PHP. Vom începe cu elementele de bază și apoi vom trece la câteva subiecte mai avansate în partea a doua! Să începem.


Introducere

Combustibilul este un nou cadru PHP construit special pentru PHP 5.3, care utilizează arhitectura MVC testată și testată pentru separarea logică a codurilor și combină cele mai bune idei ale unor cadre existente cu îmbunătățiri și idei proprii. O versiune finala v1.0 a fost lansata abia recent, dar, deja, framework-ul are o mare urmarire dupa noua luni de dezvoltare grea. Acest articol vă va face să vă grăbiți cu privire la modul de a face site-uri cu combustibil - dar, în primul rând, să vorbim puțin despre arhitectură.

Înțelegerea MVC

Arhitectura MVC (Model-View-Controller) este utilizată de multe cadre existente, cum ar fi CodeIgniter, Zend Framework, Symphony și Ruby on Rails. Dacă sunteți familiarizat cu oricare dintre aceste cadre, aveți un început!

Pentru cei care sunt noi în această arhitectură, MVC este o abordare a separării codului dvs. în funcție de rolul pe care îl joacă în aplicația dvs. În fluxul de aplicații, acesta începe cu un controler care este încărcat de combustibil. Se execută apoi o metodă care determină ce date să fie recuperate utilizând un model. Odată ce acest lucru se face, controlorul poate decide ce Vizualizări să se încarce (dacă este cazul). Vizualizările conțin rezultatele pe care vizitatorii dvs. le pot vedea, răspunsurile AJAX sau mesajele de eroare.

O explicație mai aprofundată a MVC din perspectiva combustibilului poate fi găsită în documentația MVC privind combustibilul; așa că vom trece la lucrurile bune.

Vom începe cu unele dintre elementele de bază pentru a obține noi utilizatori. Dacă unele dintre aceste lucruri par a fi evidente, vă rugăm să treceți în jos pentru a obține unele dintre caracteristicile mai interesante.


Pasul 1: Instalare

Instalarea este la fel de simplă ca și printarea unei copii de la GitHub sau descărcarea unui ZIP de pe site. Puteți utiliza, de asemenea, o instalare cu o singură linie dacă utilizați un sistem * nix, cum ar fi Linux, Mac OS X etc., care necesită să ruleze Git. Instalarea Git este destul de ușoară și face lucrurile mult mai ușoare pe măsură ce vă dezvoltați aplicațiile:

$ curl get.fuelphp.com/oil | SH

Aceasta va instala o versiune foarte limitată a "uleiului", care este numele utilitarului de linie de comandă pe care îl puteți folosi când lucrați cu aplicații de combustibil. Această versiune dezbrăcată poate fi utilizată pentru a crea aplicații:

$ ulei creează blog

Acest lucru va crea un dosar blog în directorul dvs. curent, care va conține cadrul de bază. Dacă întâmpinați probleme, atunci aruncați o privire la instrucțiunile de instalare mai detaliate.

Presupunând că ai executat această comandă în radacina web a serverelor locale, ar trebui să fim capabili să căutăm http: // localhost / test / publice și vedeți pagina de întâmpinare.

Structura fișierelor

Rădăcina cererii dvs. trebuie să conțină trei elemente principale:

  • combustibil/ - Unde tot codul tău PHP va trăi.
  • public/ - Orice doriți să fiți direct accesibili în browser, deci JS, CSS, imagini etc..
  • ulei - Un executabil, care este o versiune mai plină de caracteristici a uleiului instalat mai devreme, care poate executa sarcini de linie de comandă, cum ar fi generarea de coduri sau depanare interactivă în cadrul aplicației. Este opțional, astfel încât să îl puteți șterge dacă nu vă place linia de comandă.

În combustibil / avem câteva dosare importante:

  • app / - Toate codurile de aplicație specifică PHP intră aici, inclusiv modelele, vizualizările și controlorii.
  • core / - Aici locuiește combustibilul însuși. Dacă utilizați Git, acesta va fi un sub-modul care poate fi actualizat cu ușurință.
  • pachete / - Combustibilul separă anumite logici în pachete pentru a evita balonarea miezului. Implicit, combustibilul va conține trei pachete: ulei, auth și orm. Aceste pachete nu vor fi încărcate decât dacă aveți nevoie de ele, așa că le vom filtra mai târziu.

Partea importantă aici este aplicația / dosarul:

  • config / - Fișierele de configurare pentru diferite clase și fișierul general "config.php" locuiesc aici.
  • clase/ - Aici vor merge toți controlorii, modelele, clasele ajutoare, bibliotecile de logică de afaceri etc. Dacă trebuie să scrieți o clasă pe care să o utilizați în codul dvs., probabil că veți intra aici. Numele sunt cu litere mici.
  • clase / controler / - Aici sunt plasate controlorii.
  • clase / modelul / - Locația pentru modelele dvs., deși acestea sunt într-adevăr doar o altă clasă.
  • vizualizari / - Puneți fișierele de vizualizare aici în directoare sau doar în rădăcină. Nu există convenții specifice de numire pentru vizualizări.

Înainte de a trece prin orice altă teorie, să scriem un cod.


Pasul 2: Buna ziua

Să ștergem combustibil / app / clase / controler / welcome.php controler și face propriile noastre, numit hello.php.

În acest fișier, adăugați următorul cod:

clasa Controller_Hello extinde Controller funcția publică action_index () echo "Hello World!"; 

Acum, dacă ne căutăm http: //localhost/test/public/index.php/hello, ar trebui să vedeți "Hello World!" ieșiți în browser. action_ prefix ne spune că aceasta este o metodă care poate fi redirecționată și nu un apel invers sau altă metodă partajată și înseamnă că puteți utiliza nume de metode, cum ar fi "lista", fără ca PHP să fie confuz.

Dacă vrem ca acest controler să fie controlerul nostru "rădăcină" în loc de cel dispărut acum welcome.php, trebuie doar să ne deschidem combustibil / app / config / routes.php și schimbați cale_rootă ca astfel:

rândul de întoarcere ('_root_' => 'hello', // ruta implicită);

Prima ta viziune

Faceți un fișier combustibil / app / opinii / hello.php si adauga:

 

Salut!

Hei , cum stă treaba?

Apoi, modificați puțin controlerul:

clasa Controller_Hello extinde Controller funcția publică action_index () echo "Hello World!";  funcția publică action_buddy ($ name = 'buddy') $ this-> response-> body = Vizualizare :: factory ('hello', array ('name' => $ name,);

Acum, dacă încărcați http: //localhost/test/public/index.php/hello/buddy sau http: //localhost/test/public/index.php/hello/buddy/John , veți vedea numele $ variabila fiind trecută de la metodă la vedere. In esenta extrage() este rulat pe vedere.


Pasul 3: Configurația de bază

După cum puteți vedea, combustibilul poate face cheia de bază Controller / View din cutie, dar dacă vrem să facem mult mai mult, va trebui să facem câteva modificări de configurare de bază. Să începem prin deschidere combustibil / app / config / config.php și setarea câtorva lucruri:

/ ** * index_file - Numele fișierului principal de bootstrap. * * Setați acest lucru la fals sau eliminați dacă utilizați mod_rewrite. * / 'index_file' => 'index.php',

Daca ai mod_rewrite instalat, putem schimba această valoare ca fiind un șir gol, care ne va permite să eliminăm index.php de la URL-urile noastre. Există un fișier .htaccess în public / care va susține acest lucru.

Apoi trebuie să configuram configurația bazei de date, care, din motive de acest tutorial, vom presupune că este MySQL. Creați baza de date cu desktop-ul GUI, phpMyAdmin sau linia de comandă etc:

 mysql> a crea baza de date blog_example;

Deschide combustibil / app / config / db.php și setați Combustibil :: DEZVOLTARE array, cum ar fi:

Combustibil :: DEVELOPMENT => array ('type' => 'mysql', 'connection' => array (hostname '=>' localhost ' , 'password' => 'yourmysqlpassword', 'persistent' => false,), 'table_prefix' => ',' charset '=>' utf8 ',' caching '=> false,' profiling '=> false),

În continuare, permiteți activarea funcției ORM și AUTH pachet prin necomentarea următoarelor linii:

/ ** * Aceste pachete sunt încărcate la pornirea combustibilului. Puteți să le specificați în * în felul următor: * * array ('auth'); // Aceasta presupune că pachetele se află în PKGPATH * * // Utilizați acest format pentru a specifica calea spre pachet explicit * array (* array ('auth' => PKGPATH.'auth / ') *); * / 'pachetele' => array ('orm', 'auth'),

Acest pas este necesar numai dacă doriți să le utilizați - ceea ce în acest tutorial vom fi.

Opțional: Utilizarea unui gazdă virtuală

Ultimul pas al configurației este crearea unei gazde virtuale. Tu nu nevoie pentru a face acest lucru, dar înseamnă că puteți utiliza o adresă URL reală și eliminați /public/ din adresele URL ale dvs. Dacă utilizați Apache, atunci o bucată simplă ca aceasta ar trebui să facă truc:

 DocumentRoot / home / phil / Site-uri / blog / public ServerName local.blog  Opțiuni Toate AllowOverride Toate  

Dacă a fost un site live, am adăugat numele serverului ca "myawesomeblog.com" în loc de "local.blog", dar acest lucru funcționează pentru demo-ul nostru. Odată ce ați adăugat "127.0.0.1 local.blog" la dvs. / etc / hosts fișier ar trebui să fie gata să plece. Dacă doriți să săriți peste acest pas, ajustați apoi URL-urile din acest articol.


Pasul 4: Începeți dezvoltarea

Cu această înțelegere de bază a modului în care funcționează controlorii, vizualizările și configurația, probabil că ați putea intra în documentație și puteți începe destul de repede, dar pentru a merge într-adevăr, cel mai bun mod trebuie să fie schela.

Lemnul nu este un concept nou și este cel mai bine cunoscut pentru locul său în cadrul Ruby on Rails. Este, în esență, o modalitate foarte simplă de a crea un cod bazat pe câteva ipoteze prin linia de comandă. Doriți să adăugați, să editați și să ștergeți o entitate pe care o denumiți și să o oferiți câmpuri. Se face prin ulei și subcomandă "petrolul generează schele"

Deci, dacă vrem să construim un blog de bază, trebuie doar să scriem "$ oil g scaffold titlu post: string șir: varchar [250] body: text"Uleiul va fi foarte verbose despre ceea ce face și vă va spune toate fișierele create:

 Crearea modelului: /home/phil/Sites/blog/fuel/app/classes/model/post.php Crearea migrării: /home/phil/Sites/blog/fuel/app/migrations/001_create_posts.php Crearea controlerului: / home / phil / Site / blog / fuel / app / classes / controller / posts.php Crearea vizualizării: /home/phil/Sites/blogfuel/app/views/posts/index.php Crearea vizualizării: / home / phil / combustibil / app / views / posts / view.php Crearea vizualizării: /home/phil/Sites/blog/fuel/app/views/posts/create.php Crearea vizualizării: / home / phil / Site / blog / fuel / app / views / posts / edit.php Crearea vizualizării: /home/phil/Sites/blog/fuel/app/views/posts/_form.php Crearea vizualizării: / home / phil / Sites / blog / fuel / app / views / template. php

Notă: Modelele generate de schele utilizează pachetul ORM, deci asigurați-vă că este activat așa cum este descris mai sus.

Veți vedea aici un model numit "post", o migrare (mai mult pe cele ulterioare) un controler"posturi"și o mulțime de puncte de vedere. Câmpurile sunt toate generate pe baza argumentelor furnizate, care sunt numele_campului: fieldtype [optional lungime]. Pentru titlu, am folosit ": string" care, atâta timp cât utilizați MySQL, va fi alias : Varchar [255], dar orice tip de DB este suportat.

Cu această comandă trebuie să ne conducem migrațiile. O migrare este o serie de modificări care trebuie făcute într-o bază de date. Acest lucru devine util când mai mulți dezvoltatori lucrează la un proiect, deoarece fiecare dezvoltator poate adăuga o migrare și puteți rula o singură comandă pentru a vă asigura că copia dvs. locală este actualizată. Nu mai există erori de "câmp lipsă" sau "tabel nu există" după tragerea ultimei copii de dezvoltare!

Pentru a rula această migrare, tastați pur și simplu:

$ ulei rafina migra Migrate la ultima versiune: 1.

Acum puteți vedea ce a făcut Oil pentru dvs. prin a merge la http://local.blog/posts

Dacă doriți să creați separat controlere, modele și migrații și nu toate împreună, puteți face acest lucru cu ușurință regulator de ulei g, uleiul g migrează, modelul uleiului g, etc.

templating

Probabil ați observat, în pasul de mai sus, că Petru a creat un fișier:

 Crearea vederii: /home/phil/Sites/blog/fuel/app/views/template.php

Acest lucru va fi creat atunci când executați pentru prima oară o comandă pentru schele deoarece toate vizualizările sunt înfășurate cu un "șablon" sau "aspect" - care este un antet și subsol care înfășoară conținutul. Pentru a trece de la designul implicit, tot ce trebuie să faceți este să editați acest șablon, să includeți propriul CSS, să adăugați un logo și să introduceți metadatele care vă plac.

Când creați controale noi, manual, puteți extinde "Controller_Template"în loc de cele obișnuite"Controlor'pentru a avea acest șablon înfășurat în jurul oricărui afișaj încărcat în controler.

Dacă doriți să utilizați un șablon diferit pentru un controler, schimbați pur și simplu șablon $ proprietate la ceva diferit.

Utilizatorii de clasă extinde Controller_Template public $ template = 'alternative'; 

Aceasta va folosi combustibil / app / opinii / alternative.php vizualizați fișierul în loc de cel obișnuit combustibil / app / opinii / template.php.

Lucrul cu formularele

Unul dintre aspectele cele mai importante ale oricărei aplicații este prezentarea formularului. Acesta este modul în care datele sunt capturate de la un utilizator; ar putea fi un login, un comentariu, un coș de cumpărături de checkout etc. Acest lucru este făcut cu HTML în mod normal, dar Fuel vă oferă câteva metode utile pentru a face acest proces mult mai ușor. Ele sunt opționale, deci dacă sunteți un fanaj HTML, continuați apoi, dar pentru a accelera lucrurile, citiți mai departe:

 

titlu: "));

rezumat: "));

corp: "), array ('cols' => 60, 'rânduri' => 8));

Aceasta este o formă foarte simplă care va funcționa cu ambele crea și Editați | ×. Pentru fiecare intrare, dacă se poate găsi o potrivire în POST o va folosi; în caz contrar, va căuta $ postare variabilă și introduceți valoarea (bună pentru editare).

Avantajul real al acestor ajutoare nu vine din sintaxa mai curată, așa cum ați putea crede, ci prin faptul că permite cadrului să înfășoare în mod programatic formularul. Acest lucru înseamnă că combustibilul poate încorpora automat atributele în toate formele pentru a vă asigura că datele trimit în setul de caractere corespunzător și activați CRSF (Falsificarea solicitărilor între site-uri) în mod automat.

Validarea formularelor dvs.

Validarea este o modalitate simplă de a vă asigura că anumite informații au fost furnizate într-o formă de depunere în mod corect. Se poate potrivi cu anumite tipare, tipuri de date sau condiții și va contribui la îmbunătățirea integrității sau a datelor.

În mod implicit, validarea nu este utilizată de Schele, deoarece este complicat să se facă presupuneri despre ceea ce dezvoltatorul se așteaptă să fie păstrat în date. Din acest motiv, validarea este opțională, dar este ușor de adăugat în controlerele dvs. generate sau de a lucra cu de la zero.

Să aruncăm o privire asupra modului în care metoda "Creați postare" poate căuta blogul nostru:

 funcția publică action_create ($ id = null) if (Input :: method () == 'POST') $ val = Validare :: fabrică (); // Adăugați un câmp pentru titlu, dați-i eticheta "Titlu" și faceți-o necesară $ val-> add ('titlu', 'Titlu') -> add_rule ('obligatoriu'); // Acum adăugați un alt câmp pentru rezumat și cereți-l să conțină cel puțin 10 și cel mult 250 de caractere $ val-> add ('summary', 'Summary') -> add_rule ('required') -> add_rule ('min_length ', 10) -> add_rule (' max_length ', 250); $ val-> add ('body', 'Article body') -> add_rule ('necesar'); dacă ($ val-> run ()) // Efectuați o postare pe baza inputului (array) $ post = Model_Post :: factory ($ val-> validated ()); // Încercați și salvați-l dacă ($ post-> save ()) Session :: set_flash ('notice', 'Post post #'. $ Post-> id. ');  altceva Session :: set_flash ('notice', 'Nu am putut salva postul');  Răspuns: redirect ("posturi");  altceva $ this-> template-> set ('eroare', $ val-> erori ());  $ this-> template-> title = "Mesaje"; $ this-> template-> content = Vizualizare :: fabrică ('posts / create'); 

Putem vedea aici că spunem clasei de validare - care este autoloadă ca toate clasele) în care domenii ne pasă. Apoi atribuim reguli și le acordăm etichete pentru a le citi. Dacă $ Val-> run () este Adevărat, noi facem un nou Model_Post utilizând fabrica și trimiteți $ Val-> validate () care conține o serie de date trimise. Cu aceasta, putem pur și simplu salva instanța, care folosește ORM pentru a face totul pentru tine.

Dacă se întoarce oricare dintre regulile de validare fals, atunci $ Val-> run () va eșua și ni se va da o serie de erori $ Val-> erori () pe care le putem trimite înapoi utilizatorului. Valoarea implicită template.php caută o notă de "notă" de flashdata (parte a clasei de sesiune) sau doar date de vizualizare normală și poate emite un șir sau un matrice, astfel încât aceasta funcționează perfect.

Folosind cunoștințele dvs. de validare și formare a formelor, puteți începe să faceți orice aplicații bazate pe controler care vă plac.

Lucrul cu sarcinile

Sarcini sunt similare cu controlorii, dar nu pot fi accesate prin intermediul unei adrese URL sau direcționate în nici un fel. În schimb, acestea sunt difuzate prin intermediul "rafinarea uleiului"subcomandă în terminal.Aceasta este minunat pentru crearea de script-uri interactiv shell care au acces la codul dvs. de bază și face crearea de locuri de muncă sigure cron o briza.

Unele cadre vă sugerează să le folosiți wget, răsuci sau ceva similar pentru a rula un controler pentru a face o lucrare cron, dar acest lucru poate duce la posibile probleme de securitate sau consistență cu cron de locuri de muncă fiind epuizate în timp pentru a provoca rezultate dăunătoare sau neașteptate. În acest fel, este protejat complet de lumea exterioară.

Pentru un exemplu de sarcină, aruncați o privire la "roboți"sarcină în combustibil / app / sarcini / robots.php:

Roboti de clasă funcția statică publică publică ($ speech = null) if (! isset ($ speech)) $ speech = 'UTILUI TOATE UMANII!';  $ eye = \ Cli :: culoare ("*", "roșu"); \\ "," albastru "). \ n". \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ " ) \ n ". \ n". \ n "\ n" \ n "\ n" : culoare ("/ \\ # \\ \\ _____ / / # \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" / ___ / | | | | | | \\ ___ \\ | | | | | | | | | | __ | \\ _ | | _ | _ | | _ / | __ | // \\\ \ <\\ _//^\\\\_ /> // \\\\\\ || / | \\ || / | | | | | --- | | --- | | --- | | --- | | | | | | ___ | | ___ | / \\ / \\ | _____ | | _____ | | HHHHH | | HHHHH | "," albastru ");

Pentru a rula acest lucru glumeţ sarcină doar tastați "uleiuri roboți"sau"ulei ro roboți "ucide toate soareci" "pentru ca robotul să spună altceva.


rezumat

Dacă ați urmat fiecare pas, ați instalat combustibilul, ați învățat unde merg fișierele importante, ați configurat o instalare de bază pentru a rula pe Apache cu mod_rewrite (și alte servere funcționează bine), și au creat controale și vizualizări simple folosind formulare și validare. Cu schele disponibile pentru a genera codul pentru a alege în afară, ar trebui să existe o mulțime de cod de învățat de la!

În acest moment, ar trebui să aveți suficiente cunoștințe pentru a juca și a crea câteva aplicații foarte simple - adică până la partea a doua a acestei serii, unde vom trece prin procesul de creare și extindere a controlorilor de bază pentru a crea separarea frontend / backend. De asemenea, vom examina ORM avansate, driverele de autentificare și încărcările de fișiere. Rămâneți aproape!

Cod