[Seminar] [Kohana: Un cadru ușoare PHP] [Brandon Liu] [Universitatea Harvard] [Acest lucru este CS50.] [CS50.TV] Max toată lumea. Numele meu este Brandon. Sunt un junior aici la colegiu face informatică, iar astăzi vom vorbi despre Kohana, care este un cadru de dezvoltare web PHP. Astăzi va fi un seminar de codificare în direct, așa că am de fapt de gând să-și petreacă 5-10 minute explica ceea ce este Kohana, și apoi am literalmente de gând să construiască un blog super-simplu pentru tine chiar aici, pur și simplu de la zero. Mergem pentru a descărca codul de pe site-ul Kohana, și vom începe construirea unui blog, și sperăm că va fi foarte instructiv, pentru că veți vedea, probabil, poate voi face unele greșeli, și veți vedea-mi recupera de la ei, sau veți vedea procesul meu de gândire cum am construi prin acest blog, și în același timp, veți obține, de asemenea, familiarizat cu cadrul de sine. Sperăm că va fi un exercițiu foarte instructiv. În primul rând, exact ceea ce este un cadru? Dacă ați luat CS50 până acum, tu nu prea am lucrat cu orice cadre încă, și acest lucru este. Ați făcut, probabil, o dezvoltare web PSET deja, și să spunem că veți continua să construiască site-uri web și să păstreze site-uri de construcții. Veți începe să observați câteva lucruri. Primul lucru pe care veți observa este că sunteți, probabil, faci aceleași lucruri peste si peste din nou, tot timpul, lucruri cum ar fi de curățare a datelor introduse de utilizator, lucruri cum ar fi organizarea fișierelor într-un anumit fel. Celălalt lucru pe care veți observa, de asemenea, probabil, este faptul că codul dvs. poate începe să devină foarte, foarte murdar, și s-ar putea lăsa murdar și doar au un timp foarte greu menținerea acesteia, sau ar putea să înceapă să structureze codul dvs. și ceea ce face modular în anumite moduri de a face mai ușor de întreținut. Aceasta este în cazul cadrelor de web, practic, a venit inch Acești oameni care au construit o mulțime de site-uri, au spus ei, "Nu avem nevoie să refaceți acest fiecare dată ne-am construi un site web." "De ce nu facem doar un pachet care face toate aceste lucruri pentru tine de fiecare dată când doriți pentru a construi un site web? " Și astfel încât, atunci când face un nou site web, te concentrezi doar asupra a ceea ce exact acest site special, este vorba. Nu aveți nevoie pentru a repeta toate diferitele configurația și separarea de coduri și codul rescrierea care de multe ori trebuie să faci atunci când faci site-uri. Ideea este că un cadru vă permite să scrie un cod de nivel superior fără a fi nevoie să vă faceți griji cu privire la detalii de nivel inferior. Un detaliu de nivel inferior ar putea fi ceva de genul care se ocupă cu curățarea datele introduse de utilizator. Asta e ceva ce nu ar trebui într-adevăr nevoie să vă faceți griji. Ar trebui să se concentreze pe ceea ce alocarea dvs. de web este de fapt despre. Se elimină o mulțime de cod șabloane. Este o arhitectură pentru proiectul dumneavoastră. Cel mai popular ar fi Model-View-Controller, pe care am de gând să vorbesc despre într-o secundă. Și de multe ori aceste cadre întruchipa un set de proceduri, reguli, și cele mai bune practici pentru tine de a utiliza astfel încât, atunci când adoptarea cadrului web va trebui să scrie cod într-un anumit fel, și este, în general, un convenit set de principii de comunitatea care este, în general, a acceptat să fie o modalitate buna de scrierea de cod. Se face codul de mai mult de întreținut, mai ușor de utilizat, așa mai departe și așa mai departe. Și, în sfârșit, lucru pe care vreau să subliniez despre cadrele față de biblioteci este aceasta o idee despre inversare de control, iar acest lucru este. Diferența dintre o bibliotecă și un cadru care este cu o bibliotecă sunteți încă scris programul principal, si tu esti un fel de a invoca bibliotecii și făcând apel la biblioteca pentru a face ceva pentru tine. Diferența dintre o bibliotecă și un cadru este că acest cadru începe cu controlul, și-l invocă codul, astfel încât să puteți gândi la ea ca - acesta este motivul pentru care se numește un cadru - cadrul prevede acest cadru și structură pentru codul dvs., și să vă umple în găuri, iar acest lucru va deveni mai evidente într-o secundă când mă vezi începe să scrie cod în contextul cadrului. Veți vedea că am completarea lacunelor, iar cadrul este un fel de a controla toate piesele în mișcare, și am să pun piesele în locurile potrivite. Astăzi vom vorbi despre Kohana, care este unul dintre mai multe cadre PHP. Există cadre de web, și acolo sunt cele în aproape fiecare singură limbă, și eu iau Kohana deoarece Kohana este, fără îndoială, și, în general, recunoscut ca cel mai simplu cadru PHP pentru a ridica. Este cel mai ușor. Există altele acolo, care vin cu multe, multe mai multe caracteristici, dar ele tind să fie mult mai dificil pentru a ridica. Și, în sfârșit, Kohana foloseste arhitectura MVC. Este destul de ușor, pe care putem construi literalmente un proiect chiar aici, chiar în fața ochilor tăi, și aveți posibilitatea să destul de mult urmați de-a lungul destul de ușor. Ce este arhitectura MVC? Ea vine de la Model-View-Controller, și, poate, dacă te gândești la codul care le-ați scris până acum pentru unele dintre psets dvs. de dezvoltare web ați putea fi posibilitatea de a vedea o parte din aceasta, dar, de obicei, atunci când veți începe scris o aplicație web mai complexe, diviziunea dintre aceste trei segmente devine tot mai evidentă. Am pus pe MVC aici, un fel de ca o stivă, și de multe ori veți auzi oamenii vorbesc despre stive în dezvoltare web, și acest lucru este de a ilustra ideea că fiecare strat, fiecare component într-adevăr încearcă să comunice numai între 2 alte componente. Cineva accesează site-ul dvs. ca un client sau un browser. Ei interacționează cu programul prin codul de vedere. Codul de vedere interacționează cu controlerul. Controlerul interacționează cu modelul, și modelul interacționează cu baza de date SQL. Și nu există nici țopăit în între, dacă scrii codul corespunzător. Ce fac aceste lucruri? Modelul, în esență, este o bucată de cod care se ocupă cu datele tale. Orice lucru care se ocupă cu baza de date, împreună cu obiectele pe care le stocați, sau recuperarea acestor obiecte în baza de date, care este tot ocupat de modelul. Poate ai obiectelor din baza de date. Vom crea un model au de a face cu mesaje, astfel încât un post poate avea unele atribute la ea. Puteți avea funcții în jurul stocarea acestor mesaje sau preluarea de mesaje sau filtrarea posturile și așa mai departe și așa mai departe, și asta e tot codul care este ocupat de modelul. Controlerul este un fel de logica de aplicare, și o mulțime de lucruri diferite pot merge în logica de aplicare. Dacă vorbești cu un API diferit, care ar putea fi în cazul în care ai de a face cu logica de aplicare. Dacă sunteți încercarea de a avea pentru a aduce în datele din mai multe modele diferite și trebuie să le combine într-un fel, care de multe ori pot fi manipulate de către operator. De exemplu, pe Facebook, dacă ai prieten pe cineva, atunci probabil că actul de stabilire a acestei relații poate fi efectuată de către operator. Și, în sfârșit, punctul de vedere este codul care este generatoare de ceea ce vedeți de fapt. De multe ori cred că în psets CS50 ei nu prea te voi încuraja să se separe aceste 3 lucruri. Veți avea, probabil, acest mare dosar, timp în care în partea de sus faci unele interogare SQL și poate face unele de prelucrare pe datele pe care le preluate din baza de date, și apoi aveți toate HTML la partea de jos. Și ați putea găsi că pe măsură ce creați mai multe pagini care ai de gând să aibă un cod de repetiție, și, de asemenea, lucru este fișierul devine foarte mare si lung și devine greoi de a gestiona. Motivul pentru care MVC este atât de bine privit este pentru un număr de motive. Primul lucru este ceva numit separare a preocupărilor care este ideea că atunci când aveți - în mod ideal, o bucată de cod ar trebui să facă un lucru și o fac foarte bine, și tu nu ar trebui să combine bucăți de cod care fac lucruri disparate. De exemplu, poti vedea cod și model de cod, ei nu au într-adevăr să fie legate. Ei nu trebuie să fie în aceleași fișiere, astfel încât atunci când se poate, separa-le astfel încât este ușor să se mențină. Un alt lucru este reutilizarea codului. Ați putea găsi te scris în aceeași interogare SQL sau de a face interogări similare, care ar putea fi captate în 1 funcție, și asta e ideea din spatele modelelor și controlere, având-o într-o funcție separată pe care o puteți reutiliza în diferite locuri în proiectul dumneavoastră. Și, în sfârșit, care este legat de uscare codul, sau nu te repeta, nu te repeta. Acest lucru este foarte ușor de înțeles în dezvoltare. Ori de câte ori se poate, nu vrei să te repet, pentru că dacă te repeta,  este mult mai costisitor de intretinut. Dacă doriți să modificați un lucru, va trebui să-l schimbe peste tot, și care duce la bug-uri, și e oribil. Regulă. Orice întrebări până acum despre Kohana la toate? Mare. Acum vom arunca cu capul în direct sesiunea de codificare, și sperăm că totul merge bine. Am de gând să construiască practic acest website pe unul dintre serverele mele de la distanță, și în acest fel voi putea, de asemenea, a se vedea site-ul web și accesa site-ul, și, de asemenea, mediul înconjurător este mai bine configurate decât mașina mea de la distanță, pentru că rulează Linux în loc de OS X. Suntem pur și simplu de gând să înceapă. KohanaFramework.org. Mă duc pentru a descărca codul de pe site-ul web. Mă duc pentru a copia adresa link-ul, du-te la serverul meu, descărcați-l, și am de gând să-l extrage. [Student] Care este cea mai mare ce poate face textul? [Brandon Liu] E mai bine? [Student] E greu de realizat? [Brandon Liu] Da, e în regulă. Am descărcat un fișier ZIP și dezarhivat că într-un director numit Kohana, și vom redenumi că CS50-Kohana, și să mergem inch Minunat. Aici veți vedea o grămadă de fișiere diferite. Cei mai mulți dintre voi poate ignora - Nu suntem de gând să treacă prin fiecare fișier care este în aici din cauza constrângerilor noastre de timp, dar, în general, atunci când instalați Kohana, primul lucru pe care îl faci este te duci la director, și vei face, practic, niște teste de mediu și de fleacuri a vă asigura că mediul este setată corect pentru a rula Kohana și asigurați-vă că totul este în regulă. Puteți vedea cele mai multe lucruri trecut, dar, în general, aveți o întotdeauna în această problemă 1 în cazul în care se plânge că unii directorul nu poate fi scris, și că din cauza unor permisiuni. Nu știu cât de mult voi au aflat despre permisiunile de fișiere în CS50, dar dacă faci dezvoltare web, ai de gând pentru a rula în această problemă foarte mult. Am de gând să-l fi scris și cred că am, de asemenea, să - acolo mergem. Ok, deci acum puteți vedea totul a trecut, și acum vă va spune pentru a redenumi fișierul install.php. Mă duc pentru a muta fișierul install.php la installed.php, și acum, dacă eu reîmprospătare, imi da o eroare, iar acest lucru este în cazul în depanare vine inch Acest lucru este în cazul în care puteți vedea ce se întâmplă de fapt să se întâmple. Chestia e că, în mod implicit, Kohana presupune că proiectul dumneavoastră este în directorul rădăcină al domeniului, asa ca se asteapta ca tu să fii la demo.brandonkliu.com. Trebuie să-l spun că este de fapt într-un subfolder. Este într-un subfolder numit CS50 Kohana. Lucru este, este interpretarea greșită a CS50-Kohana ca altceva, pe care voi explica la tine într-o secundă. Dar eu trebuie să vă spun că e ceva care e de așteptat. Ceea ce am de gând să faceți este să mergem să meargă în acest folder numit bootstrap.php, care este directorul de configurare în cazul în care o mulțime de lucruri diferite, sunt înființate. Eu deschid asta. Apoi, poate unul dintre primele lucruri pe care voi face este de a schimba fusul orar. Și apoi să vedem. Aha! Chiar aici. Există o mulțime de diferite cuvinte de configurare aici, dar cel care caut este acest lucru numit URL de bază, și implicit am să-l înființat la Kohana, dar am de gând să schimbe că a CS50-Kohana, și cred că ar trebui să-l repara. Da, mare. În mod implicit, pentru a vedea că este de lucru, se spune, "Hello World." De unde a venit de la? Cum am ajuns la Hello World? Unde anume este codul pe care a scris de fapt asta? Pentru a înțelege că, voi introduce acest concept numit de rutare. Destul de mult toate cadrele web au conceptul numit de rutare, care este bucata de software-ul care va mapa un anumit URL pentru o anumită bucată de cod în cadrul dumneavoastră. De exemplu, dacă aveți unele URL-ul și te duci la unele URL ca foo.com / blog / toate apoi ceea ce a cadrului se va face - sau cel puțin ceea ce Kohana este de gând să facă - este că va găsi o clasa numita blog controler, și-l va executa acțiunea funcție numită tot. Știu că vorbesc despre clasă și funcții, și știu că voi nu au acoperit clase și funcții în încă CS50, dar pentru acum, vă puteți gândi de clase ca doar un grup de funcții, o modalitate de grupare a funcțiilor împreună. Asta e tot ce trebuie să știi. Acum, dacă ne uităm la structura noastră dosar, în dosarul aplicației este un alt folder numit clase, și alte foldere se numesc controler și model. Dacă te uiți în interiorul folderul Controller, vom vedea că există un fișier numit Bine ai venit, și puteți vedea aici este o clasa numita controler Bine ai venit, și există o funcție numită acțiune Index, și ceea ce face este o stabilește organismul de răspunsul dumneavoastră la Hello World. Acesta este cazul în care codul este scris. Cealaltă întrebare este, ei bine, eu nu merg la bla, bla, bla, / welcome / index. Cum am ajuns aici? Ei bine, asta e pur și simplu pentru că aici, la partea de jos a fișierului noastre bootstrap unde ne-am stabilit rutele noastre puteți vedea că au stabilit unele implicite pentru tine. Controlerul implicit este binevenit. Acțiunea implicită este de start. De aceea, atunci când ne-am pus nimic acolo sa dus în mod automat la controler Welcome și acțiunea index. Totul sens până acum? Acum, puteți face mai mult decât du-te la controler și o acțiune specifică. De asemenea, puteți trece la parametrii la controler. Doar ca un exemplu, Am de gând să adăugați o altă acțiune în acest controler pentru a vă arăta. Să numim această acțiune Echo, pentru că o să-ți spun tot ce-l dau, și așa că am de fapt de gând să apuca un parametru care va fi trimis prin mine la programul de rutare, și după cum puteți vedea aici, aceasta linie de aici, se poate vedea că acest lucru înseamnă de fapt ai un controller, și aveți o /, și aveți de acțiune, și aveți un alt /, și care va fi parametri, și pentru că avem acest nume ID în paranteze unghiulare, ceea ce înseamnă că suntem numirea acest ID parametru. Mai târziu, în codul meu controler dacă vreau pentru a apuca o dețin de acest parametru, Eu pot folosi codul am scris, găsiți parametrul numit de identitate. Asta e ceea ce am făcut aici, și am de gând să se întoarcă și să spună, "Ai spus" asta. Iar acum, dacă mă duc la site-ul nostru, Mă duc la cs50-kohana/welcome/echo/Helloooo-- oh, asta e drept. Există un pas am lăsat pe dinafară. Aceasta este o parte a ideii vii codificare. Iată un lucru. Să vedem. Deci, în mod normal, în mod implicit, cu o mulțime de aceste aplicatii web trebuie să includă acest lucru index.php din URL-ul dvs., deoarece ideea este index.php este un fel de punct de intrare de cererea dumneavoastră, dar, desigur, că e un fel de enervant de a avea. Tu nu vrei să aibă index.php apară în URL-ul dvs., și destul de mult în fiecare cadru web afară de la cutie are această problemă index.php, și deci va trebui să ia unele măsuri pentru a fi capabil de a elimina acest lucru. Și astfel, în acest caz, ceea ce am de gând să faceți este să avem de gând să utilizeze un fișier numit. htaccess, și acest lucru este ceva care este specific pentru serverul de web Apache, și se pot face lucruri, cum ar fi rescriere URL-uri și redirecționarea URL-uri și așa mai departe și așa mai departe, și Kohana este destul de frumos pentru a oferi un htaccess șablon. pe care le putem folosi. După cum puteți vedea, există un fișier numit acolo example.htaccess, și vom copia că la. htaccess. Am de gând să deschidă acest lucru și editați-l, și, practic, face o gramada de lucruri diferite. Linia cheie poate doriți să se uite la este chiar aici. Ideea este că aceasta stabilește o regulă care spune, "Bine, tot ce tastați, pune prefix index.php la asta." Puteți vedea asta. . * Standuri pentru nimic, se potrivesc cu nimic, și apoi de-a doua parte este index.php / $ 0, și 0 dolari se refera la ceea ce a fost potrivit anterior. Asta face sens? Dar lucrul cu adevărat cheie vreau să se schimbe este schimbe această bază de rescriere, care este baza URL. Este un fel de presupune cazul în care sunteți de lucru de la. Am de gând să adăugați CS50 Kohana pentru că, și în acest fel acum, dacă am elimina index.php, ar trebui să funcționeze, și am de gând să adăugați câteva numere pentru a vă arăta că a făcut-o într-adevăr de lucru. Sună bine. Orice întrebări până acum? [Student] Cum sa stii pentru a face 123? Este că un argument? Exact. Vă puteți gândi la ea ca un argument. Dar un lucru ciudat, totuși, este că modul în care o face Kohana este nu o face exact ca un argument. Trebuie să-l apuca ca aceasta. Aveți de a apuca obiectul cererii și să ceară parametrul care este numit de identitate, și că ID-ul vine de la acel fișier bootstrap că am arătat mai devreme, și ID-ul de nume a fost în aceste paranteze unghiulare, și că este modul în care te apuca de acești parametri. Minunat. Orice alte întrebări? Cum am spus, controlere, ei se ocupe de logica de aplicare, așa că e un exemplu unde se poate vedea asta e. - E foarte de bază, dar este încă logica aplicației, ideea de a hapsân parametrului și crearea unui nou șir care spune, "Ai spus că blah," si apoi scuipa înapoi la tine. Și, în general, ceea ce faci este să creați controlere diferite. Puteți crea controlere separate pentru diferite părți ale site-ul dumneavoastră. Astăzi vom face un site foarte simplu, și că va fi un blog foarte de bază. Vom face un nou controler doar pentru posturile într-un blog. Dar, apoi, dacă ar fi să adăuga comentarii la post pe blog, atunci probabil că aș fi vrut să facă un nou controler pentru aceste comentarii. Dacă aș fi vrut să adăugați utilizatori, probabil, aș adăuga un nou controler pentru acei utilizatori, și, în general, ideea este că de fiecare dată când aveți un nou model, un nou obiect de date pe care ai de a face cu, aveți un singur controler pentru acel obiect de date. Astăzi suntem doar de gând să lucreze cu un obiect de date, și care va fi posturi, și, de asemenea, vă puteți gândi de obiecte de date ca fiind corespunzătoare de mese. În general, fiecare tabel corespunde cu 1 tip de obiect de date, astfel încât masa de post va avea un model de mesaj, care va avea un controler mesaj corespunzător că, și același pentru comentarii, la fel de utilizatori, și așa mai departe și așa mai departe. Și că este o regulă generală de degetul mare. Nu vor fi cazuri speciale în care vă pot fi diferite de la care, dar 90% din timp, asta e ceea ce ai de gând să faci, și vă voi arăta asta e ceea ce vom face azi. 1 mai mult conceptul înainte de a se arunca cu capul înapoi în codul, această idee de obiect de cartografiere relaționale. Voi ați făcut deja o PSET dezvoltare web, și le-ați văzut că ați face o interogare SQL, și ceea ce se întoarce la tine sunt rânduri. Ai aceste rânduri, și indicele lor de către unele nume, numele coloanei și masă, și că e modul în care lucrați cu ea, și acesta poate fi un pic greoaie. Dar, de asemenea, dacă aveți relații în baza de date, cum ar fi, de exemplu, dacă am comentarii și mesaje, atunci poate că vreau să iau postul-mamă a unui comentariu. Dacă am folosi doar rânduri în SQL, atunci tot ce pot obține este ID-ul de de la postul de părinte și nu postul în sine. Dar atunci când suntem de codificare, ceea ce ne dorim de fapt este de a apuca de fapt  mamă în sine posta uneori. Ce obiect relational mapping nu este este nevoie de rezultatele interogării bazei de date și-l pune în obiecte pentru tine, care sunt mult mai frumos de a lucra cu decât matrice simple și rânduri. De exemplu, acum când am un comentariu, probabil, și vreau să iau după mamă, și eu nu poate comenta săgeată mesaj, atunci se va da de fapt, mi-a obiectului mesaj corespunzătoare postului părinte real, nu doar un act de identitate, pe care mi-ar fi altfel, de a folosi și de a face un alt interogare SQL pentru a apuca post, care este greoaie și inutile. Și, în plus, de cartografiere toate aceste rânduri de date în obiecte, aveți posibilitatea să atașați, de asemenea, mai multe funcții de obiecte, Deci, de exemplu, am vorbit despre cât de clase sunt, în esență, grupuri de funcții. Poți să te gândești la asta. De exemplu, poate că am avea acest obiect mesaj, și, poate, aș dori să aibă un fel de funcții atașat la acesta care mi-a spus de fapt a fost postat recent? A fost postat în ultima săptămână, adevărat sau fals? Și că este o funcție pot atașa pe acel obiect, și este foarte convenabil să-l aibă în același loc, și există o serie de funcții diferite, puteți crea pentru aceste obiecte, și este într-adevăr frumos să fie în măsură să-l atașați la o clasă, la un obiect, în timp ce în cazul în care tocmai ați avut rânduri provin din baza de date, atunci nu se poate atașa cu adevărat orice funcționalitate de care. Este literalmente doar date. Orice întrebări cu privire la faptul că, la toate? ORMs sunt dezvoltare web foarte frecvente, și există o mulțime de diferite tipuri de ORMs, și Kohana are propriul ORM. Este foarte de bază, dar veți obține un gust de ceea ce pare. Să creăm un model de blog noastre, și primul lucru pe care, evident, trebuie să facem este de a crea un tabel real în baza noastră de date pentru a stoca de fapt, datele noastre pentru aceste posturi. Primul lucru pe care am de gând să faceți este să mergeți la phpMyAdmin. L-ați folosit phpMyAdmin înainte? Bine, minunat, așa că voi știu deja ce este că, și am de gând pentru a crea un nou tabel numit Kohana Mesaje, și că va fi foarte simplu. Va trebui să vă conectați înapoi inch Tot ce ai de gând să faci azi este să aibă un autor și un corp, doar păstrați-l simplu. Am de gând să creeze masa, iar acum ne-am avea un tabel reprezentând mesajele noastre cu două câmpuri pentru autorul nostru și corpul nostru. Celălalt lucru pe care am de gând să fac acum este configura cererea mea de web astfel încât să știe cum să se conecteze la baza de date, și aceasta, din nou, este ceva ce va trebui să facem cu toate aplicațiile web. Trebuie să-l spun numele de utilizator și parola și numele bazei de date și așa mai departe și așa mai departe să dau seama cum de a conecta de fapt, la baza de date. În Kohana, avem ceva numit un modul de bază de date, și în folderul de configurare avem acest folder numit de date, și după cum puteți vedea, există o grămadă de setări pe care trebuie să setați aici pentru a spune ceea ce este numele de utilizator și parola pentru baza de date, așa că am pot conecta de fapt, să-l. Și din moment ce eu nu vreau ca voi să știu de fapt numele de utilizator și parola de baza mea de date, Am un dosar în care am deja totul înființat, și am de gând să copiați și lipiți-l peste. Minunat. Bine. Cred că asta e tot de configurare am nevoie pentru a face, dar să vedem. Vom continua să lucreze în ea, și în cazul în care ceva se blochează, atunci vom repara. Acum, ce am de gând să faceți este să am de gând pentru a crea un nou controler. Sau de fapt, îmi pare rău. În primul rând trebuie să creeze un nou model. Voi crea un nou model numit post.php, și ceea ce am de gând să faceți este să mergem să-i spunem clasa Model_Post. Ia unele sintaxă evidențierea pe, și așa că atunci când spun, "se extinde ORM," asta e practic unele mai mult orientat-obiect de programare, care, din păcate, voi nu au învățat încă în CS50, dar este destul de ușor să ridic. Ea dă-mi toate această funcționalitate în plus care vine în acest pachet ORM, și așa că am obține o grămadă de funcții suplimentare și fleacuri gratuit, care veți vedea un pic de la un al doilea. Chiar acum, de fapt tot ce trebuie să faceți este să creați această clasă. Nici măcar nu trebuie să facă nici o funcție sau nimic, dar am creat o clasă care reprezintă masa, și pentru că am extins această clasă ORM, I a lua o grămadă de lucruri pentru gratuit, astfel încât de acum nu trebuie să configurați nimic mai sus. Și acum, ce am de gând să faceți este să am de gând pentru a crea un nou controler, pe care am de gând să nume blog.php, și am de gând să copiați controlerul Welcome așa că nu trebuie să tastați unele lucruri, și acum trebuie să redenumiți acest lucru. Acum, ce am de gând să fac pentru a testa pentru a vă asigura că totul este de lucru afară, Am de gând să apuca primul post de la baza mea de date și imprima corpul mesaj pe ecran. Pentru a face ca ceea ce am de gând să fac în primul rând este am de gând pentru a salva posturile pentru o variabilă, astfel ceea ce vom face este - în Kohana ceea ce faci este de a apuca obiectul poștă e un fel de greoaie, dar trebuie să faci acest lucru numit ORM :: fabrică, și apoi treci în numele modelului pe care doriți, și se returnează obiectul ORM care reprezintă acel model. Și apoi, cum am spus, atunci când vom extinde obiectul ORM, avem toate aceste metode de liber, așa de exemplu, vom obține această nouă funcție numită "găsi toate," care revine în mod automat fiecare mesaj în baza de date, care este destul de convenabil. Și acum în organism am de gând să se întoarcă primul mesaj și reveni corpul său. Și, desigur, am nevoie pentru a crea un mesaj, asa ca hai sa introduce un nou post. Voi spune, "Brandon, foarte primul meu post." Minunat. Iar acum vom merge la blog-uri și dacă totul funcționează bine - oh, acest lucru este din nou un alt lucru permisiunea dosar prost. Stai o secundă. Este un fel de absurd. Acolo mergem. Bine. Am stabilit că problema permisiune. Acesta a fost încercarea de a crea unele fișiere și unele jurnal, și permisiunile, din nou, nu au fost stabilite în mod corespunzător, așa că l-am făcut astfel încât aceste fișiere au fost permisiuni de scriere și executabil așa că ar putea conecta de fapt la lucruri. Acum e mi-a dat un alt proverb excepție, "clasa de ORM nu a fost găsit" și asta pentru că am uitat un pas. Asta e prea rău. În fișierul folder bootstrap, există aceste module aici, pe care le puteți alege pentru a activa sau dezactiva. Acestea sunt o grămadă de caracteristici diferite pe care le puteți alege pentru a utiliza în Kohana, care este un fel de frumos. De exemplu, ei au un modul de autentificare pe care le puteți utiliza pentru autentificarea utilizatorilor. Ei au un modul de cache, dacă doriți să pună în aplicare un fel de cache înapoi end pentru a face munca de aplicare fleacuri mai repede și. Avem nevoie pentru a permite baza de date și modulul ORM, pentru că așa cum am spus, suntem folosind baza de date, în mod evident, și avem nevoie, de asemenea, pentru a permite modulului ORM, pentru că ne-ar plăcea să aibă funcționalitatea în plus, ceea ce este frumos de a avea. Tot ce trebuie să faceți este să decomentați cele 2 linii, și acum, dacă am refresh, mi-a dat o altă eroare. Se spune, "clasa Model_Post nu a fost găsit." Acum, acest lucru este o problemă de bun pentru a avea. Să vedem. O facă publică. Nu. Stai. Oh, dragă. Nu știu de ce nu-i în stare să găsească asta. E foarte ciudat. Am această clasă aici. Cred că s-ar putea să - oh. Sunt atât de prost. Am uitat să adăugați o etichetă PHP. De aceea. Acum am să anulați că o modificare tocmai am făcut-o. Bine. Acolo mergem. Asta a fost într-adevăr o prostie. Nu am avut un PHP etichetă de deschidere. Dar, după cum puteți vedea, acum este de lucru în mod corespunzător, corect? Avem un mesaj. Ne-am luat primul post, iar acum ne-am imprimat corpul său. Mare. Fantastic. Orice întrebări până acum? Nope? Orice întrebări? Ok, deci ne-am creat modelul post, foarte de bază, și vom adăuga unele funcții mai târziu. Putem adăuga validări și de filtrare. Validări sunt unul dintre lucrurile că cadre rezolva pentru tine foarte, foarte bine, și nu cred că voi avea de a face acest lucru pentru PSET dumneavoastră CS50, dar dacă faci dezvoltare web pentru proiectul final, esti probabil de gând să vrei să faci un fel de validare, ca și cum nu avea nume de utilizator goale, poate avea o parolă cu cel puțin o parte lungime, lucruri de genul asta. Și este într-adevăr dificil să pună în aplicare aceste lucruri de către noi înșine, și destul de mult în fiecare cadru unic de web o face pentru tine și vă permite să o facă într-un mod foarte curat. Iar modelul este locul unde te exprima, în general, aceste reguli de validare, deoarece este validarea dacă un model este valabil sau nu. Dar pentru acum, vom pune că, până mai târziu, și de acum vom lucra la o altă parte, și vom încerca și de a face o noua viziune care listează toate posturile. Pașii implicați în a face o nouă acțiune pentru listarea toate posturile este de a apuca o listă a tuturor posturilor și apoi face lista a tuturor posturilor printr-un punct de vedere. Chiar aici, destul de fericire, ne-am luat deja toate posturile folosind aceasta prima linie, găsi toate funcțiile, și acum ce vom face este atât de departe Am fost stabilirea în mod direct corpul răspunsului prin trecerea șirul, dar acum vreau să folosesc o imagine, și diferența dintre o vedere și doar a face acest lucru este cu o vedere pot avea o mare model frumos, HTML, și ce pot face este o anumite variabile trece și apoi au punctul de vedere popula automat șablon sale folosind aceste variabile. Ce voi face este Voi crea un nou punct de vedere, și voi numi vedere ceva de genul "blog / index" și am de gând pentru a lega practic acest lucru - oh, ce scriu? Creierul meu este în altă parte. Am de gând să lega posturile variabile de vedere, astfel încât fel de vedere are acces la acest post variabilă. Și acum am nevoie pentru a crea acest punct de vedere, așa că aici avem acest folder numit "Vizualizări" și în primul rând, am de gând pentru a crea un nou dosar în care numita "Blog". Acest lucru este frumos. În acest fel putem avea o ierarhie frumos pentru punctele noastre de vedere. Și apoi am de gând pentru a crea un alt fișier de acolo, numit "index.php". Minunat. De fapt, hai să-i ambele au aici. Efectuarea unui fișier de vedere este, probabil, cea mai simplă parte din toate acestea, și acestea sunt, probabil, lucruri pe care sunteți deja familiarizat cu. Vom face ceva foarte simplu, incep sa spuna, "Lista mea de blog." Atunci putem trece prin, și putem repeta prin mesaje matrice, apuca fiecare mesaj și spune ceva de genul - poate adăuga o linie și apoi imprima autor și a corpului. Asta face sens până acum? Și să vedem dacă merge. Nu sa întâmplat nimic. Mă întreb de ce. Oh, am pierdut 1 pas. Foarte prostie din partea mea. Am creat un punct de vedere, dar nu am stabilit punctul de vedere ca răspuns, deci va trebui să faci un lucru mai mult. Trebuie să faci "acestui organism răspuns" și setați-o să fie punctul de vedere. Acolo mergem. Avem rubrica noastră, și apoi avem un post, și doar pentru lovituri, să introduceți un alt post astfel încât să putem vedea o listă. Și introduceți aceste 2 posturi, și acum, dacă am necesară încărcarea paginii, am vedea toate aceste posturi de aici. Asta face sens până acum? Da, o întrebare? Oh, bine. După cum puteți vedea, am fost în stare să separe toate aceste coduri de în diferite secțiuni, și apoi puteți vedea că este cel mai clar cu codul de vedere. Acest fișier de aici care reprezintă punctul de vedere, ea ii pasa doar despre reprezentarea datelor, afișarea de date. Acesta devine trecut un fel de date, și tot ce face este doar ți-l arăt. În toate celelalte părți ale codului, nu va trebui să vă faceți griji cu privire la orice de care, și în mod similar, codul de vedere nu trebuie să vă faceți griji despre nimic cum de a accesa baza de date și așa mai departe și așa mai departe, care este foarte bun și face codul mult mai mult de întreținut. Cum am spus, opinii, sunt dinamice, în care e un dosar, dar ar genera puncte de vedere diferite în funcție de variabilele de fapt trece în, și în plus, există o mulțime de diferite funcții helper pe care le puteți folosi pentru a vă ajuta să scrie cod mai rapid, pe care voi arăta într-o secundă. Da. [Student] Deci, zero dolari este un controler, corect? Că al doilea lucru. Întrebarea este este 0 dolari un controler? 0 dolari este o variabilă am creat chiar aici. Am creat o vedere în primul rând. L-am atribuit unele variabile. Apoi am trecut în această funcție, a pus-o în calitate de organism de răspuns. Asta face sens? [Student] Deci, este de vedere :: fabrică, este punctul de vedere ca o clasă sau o bibliotecă [inaudibil] funcție fabrică? Este vorba de funcția de vedere :: fabrică, și, practic, acest lucru este ceva mai mult orientat pe obiect de programare, în esență. Vedere este punctul de vedere al clasei, și are o metoda numita "Fabrica" și că este o modalitate de a apuca obiectul care este numit "blog / index." Și asta e ceva mai mult orientat-obiect chestii de programare că eu nu am de gând să meargă în aici prea mult. Acum, evident, ne-o dorim pentru a crea posturi noi, dar nu vrem să aibă de a face acest lucru prin intermediul unei baze de date, așa că vom crea o nouă acțiune pentru a crea un nou post, și există o mulțime de lucruri ce trebuie să facem. Primul lucru pe care am de gând să facă - să abordeze aceste lucruri, unul câte unul. Primul lucru pe care îl vom face este că avem de a crea un formular pentru introducerea unui nou post, dar eu sunt, de asemenea, de gând să adăugați o nouă acțiune în primul rând, adăugând astfel o nouă acțiune este la fel de ușor ca adăugând o nouă funcție cu controlerul, și de acum am de gând să fac ceva foarte de bază, apuca doar acest punct de vedere și post-l, doar afișa pentru tine. Și apoi acum am de gând pentru a crea un nou fișier de vedere, și am de gând să înceapă să scrie unele lucruri. Ce este frumos despre Kohana este faptul că acestea oferă o mulțime de funcții diferite helper pentru tine de a scrie cod de vedere mult mai ușor, și 1 din aceste funcții helper sau module helper este de aproximativ scris forme. Pentru a scrie forme, nu am cu adevărat să scrie direct orice HTML mine. Voi au scris forme HTML. Știi cum poate fi într-adevăr, într-adevăr dureros și dificil de a scrie forme. Nu e amuzant, așa din fericire, putem scrie de fapt o formă cu ajutorul lui Kohana forma funcțiile helper a face acest lucru pentru noi. Vom avea practic domenii pentru fiecare lucru pe care îl avem, astfel unul pentru autori și una pentru organismele. Vom avea o etichetă, și vom avea o intrare. Și, în final, vom avea o prezentare. Și, după cum puteți vedea, aceasta este mult mai curat pentru a scrie decât toate că HTML murdar, care este un fel de frumos. Desigur, există și alte cadre web care au chiar mai curat decât atât, dar cel puțin aceasta este mai bună decât scris HTML singur. Awesome, deci acest lucru este ceea ce vedeți. Asta-i un fel de murdar, așa că am de gând să adăugați un sfârșit de linie acolo pentru a face ca arata un pic mai frumos. Ei bine, desigur, încă pare foarte, foarte rău, dar suntem doar concentrat pe funcționalitatea de acum și nu pe estetica. Nu ai timp pentru a face totul. Și, după cum puteți vedea, acum avem o formă super-de bază, care este un fel de frumos. Acest cod Aș spune că este mai curat decât încercarea de a scrie un HTML forma singur, așa că e drăguț. Ce urmează? Acum, avem nevoie pentru a face lucruri cu acțiunea. În mod normal, atunci când scrie forme HTML, trebuie să-l spună unde se va depune formularul la. În mod implicit, în cele mai multe cadre de web, se depune la același URL-ul exact, deci chestia este, dacă trimiteți o solicitare GET la / blog / nou, aceasta ar trebui să afișeze forma, dar dacă trimiteți o solicitare post / blog / nou cu datele, aceasta ar trebui să încerce, de fapt pentru a salva acest post și de a face ceva cu ea. Ceea ce vom face este practic tot ce trebuie să facem pentru a verifica dacă este o cerere de mesaj sau o cerere get este de a verifica ceea ce sunt variabilele mesaj le puteți seta. Și dacă variabila mesaj este setat, apoi vom încerca și de a crea un nou post. Din nou, doar ne-am face acest lucru, și care creează un nou post, și vom merge la literalmente stabilit domeniile sale, cum ar fi acest lucru, și apoi ne-am de gând să-l salveze. Și apoi am de gând să redirecționeze la pagina de index pentru a putea vedea lista noastră de posturi din nou. Să încercăm asta. Voi spune, "Brandon," și apoi să prezinte post, și dacă totul merge bine, după cum puteți vedea, mi-a redirecționat către pagina de index, și dacă am derulați în partea de jos, avem un post nou introdus. Yay! Da, întrebare. [Student] Ce se întâmplă dacă ai fi intrat în exact același lucru ați introdus înainte? Nu-l verificați pentru a vă asigura că nu ați duplicat În același prezentarea? Fie implicit, nu, pentru că în mod implicit - îmi pare rău, întrebarea este dacă introduceți în exact aceleași date în formă și susțin că, va permite să introduceți un obiect duplicat, un duplicat de intrare, în esență? Chiar acum, da, se va permite să faci asta, pentru că în bazele de date este perfect valid să aibă rânduri complet duplicat, dar în cazul în care este un motiv de îngrijorare, atunci puteți adăuga validări, de exemplu, pentru a se asigura că în cazul în care acest lucru este exact la fel ca pe ceva care există deja, apoi spune că este un obiect invalid, și apoi puteți specifica chiar și mesajul de eroare și spune, "Invalid pentru că aceasta există deja", sau ceva de genul asta. Dar, în acest caz, am putea crea ceva duplicat. Acum, haideți să încercăm și se adaugă câteva validări. Problema cu acest lucru chiar acum este că Am putea prezenta literalmente un post complet gol. Am posibilitatea să faceți clic pe acest buton, chiar acum, și acolo vom merge. Nu se poate cu adevărat vedea, dar această linie în plus aici indică faptul că am literalmente un nou post. Ea are doar un autor gol și un corp gol, și nu vrem pentru a permite oamenilor să facă asta. Acest lucru este în cazul în care validarea vine inch Pot merge la obiect mea de model, și acum pot adăuga o nouă funcție care specifică ce reguli de validare ar trebui să adăugați la acest model pentru a vă asigura că acesta este valid sau de a specifica ce înseamnă să fi un post valid? Și vreau să spun că este doar un mesaj valabil dacă atât autorul și corpul nu sunt goale, iar acest lucru este modul în care se face în Kohana. Puteți crea o nouă funcție numită "Regulile" și apoi vă întoarceți în esență un tablou asociativ care definește regulile de validare pentru acest obiect. Vom reveni matrice, și apoi ceea ce am de gând să faceți este să spune "autorul," se duce la o matrice, care se duce la un alt array numit "nu este gol." Și apoi am de gând să spun "trup." Bine, și sintaxa pentru acest lucru și structura pentru acest poate arata un pic mai greoaie și un pic mai complicat. Dacă ați citit documentația, e destul de simplu să ne dăm seama, Dar, în esență, aceasta este ceea ce trebuie să faci pentru a specifica unele reguli de validare, și există o mulțime de reguli diferite care Kohana vă va oferi gratuit, ca să puteți adăuga reguli de spus aceasta trebuie să fie de cel puțin această lungime. Poate că trebuie să fie numeric. Poate că trebuie să fie numeric alfa. Poate că trebuie să fie cel mult această lungime, așa mai departe și așa mai departe. Există o mulțime de reguli diferite care Kohana prevede pentru tine, si poti sa te duci pe site-ul lor, uita-te la documentația, și puteți vedea toate lucruri diferite pe care le puteți face. Dar acest lucru este tot ce trebuie să fac, și acum să vedem ce se întâmplă dacă am să prezinte un mesaj gol. Ce se va întâmpla? Oh, nu, primesc o eroare. I a lua o excepție validare. Ei bine, e bine. Ea mi-a spus că modelul meu este invalid, dar nu vreau pentru a afișa o excepție pentru utilizatorii mei atunci când încearcă să prezinte ceva invalid, corect? Vreau să le dau un fel de mesaj de eroare prietenos atunci când ceva nu merge bine. Ceea ce am de gând să faceți este să mergem la înveliți totul într-o buclă try catch. De fapt, cred că acest lucru este, de asemenea, ceva ce nu au învățat încă în CS50, deoarece C, limbajul de programare C, nu are excepții, dar aproape fiecare altă limbă are excepții, astfel încât într-adevăr, foarte pe scurt, o excepție este ceva care o bucată de cod poate arunca o excepție atunci când ceva nu merge bine, dar apoi, poate, o altă bucată de cod mai sus poate prinde această excepție și de a face ceva cu ea. De exemplu, în acest caz, bucata de cod care este încercarea de a salva un model, se validează modelul, și în cazul în care se spune: "Bine, acest model este invalid," se va arunca o excepție, iar acest lucru este un fel de echivalent cu în C, s-ar putea returna un -1 sau ceva de genul asta. Și apoi pentru mine, această funcție, codul meu la un nivel superior, pot încerca și de captură ca excepție și, practic spune, "Bine, dacă mă prinde excepție, ceea ce am de gând să fac?" Sau aș putea alege să nu pentru a prinde această excepție și a lasa pe cineva mai sus prinde excepție, sau în cazul în care nimeni nu-l prinde, apoi întregul program se blochează și spune, "Ceva a mers prost, și nu am putut descurca." Dar ceea ce facem este când înfășurați o bucată de cod într-un bloc try, și apoi se adaugă, de asemenea, ceva numit un bloc de captură, care este un fel de cod care va încerca și prinde excepții care pot apărea. Și așa că, dacă-l prind această excepție special sau invalidare excepție, atunci ceea ce am de gând să faceți este să Am de gând să se stabilească erorile - Cred că e modul în care o fac - și am de gând să se stabilească erorile la un obiect. Și atunci ce am de gând să faceți este în cazul în care hit-uri această excepție, ea nu va redirecționa, și în cazul în care nu redirecționează, este de gând să iasă din blog-ul în cazul în care și a lovit acest blog / nou, care se vrea ce vreau să fac. Dacă există o eroare, atunci vreau să mă întorc la forma și afișa aceste erori. Acum, ceea ce vreau să fac este vreau să treci în aceste erori de punctul de vedere. Bine, cred că am punctul de vedere aici, și, practic, vreau pentru a afișa aceste erori dacă acestea există. Înainte de a scrie HTML pentru care, am de gând să foarte repede vă arăt ce structura acestei erori arată variabile place, și aceasta este o bună practică, în general. De multe ori veți obține ceva înapoi de la o metodă, o funcție în cadrul web, și nu știi ce variabila arata ca, așa că nu știu cum să lucreze cu el. Am de gând să folosească o metodă de imprimare r să practic imprima afară. Și, după cum puteți vedea, ea mi-a spus că este o matrice asociat, și aveți o cheie, autor, puncte de la acest șir, autor nu trebuie să fie gol, și o altă cheie, corp, puncte la un alt șir, corpul nu trebuie să fie gol. Sunt ca, bine, rece. Apoi am putea repeta prin matrice și imprima fiecare mesaj. Este practic ca un tablou asociativ cu o grămadă de mesaje. Ceea ce am de gând să faceți este să "cazul în care erorile," și am de gând pentru a crea o lista neordonata, și am de gând să itera prin toate erorile. Și acest lucru, și acum am de gând să încercați să îl trimiteți din nou, și să vedem ce avem. Acum avem această listă frumos de erori, și acest lucru este încă destul de urât, dar acest lucru, evident, poate fi formatate pentru a arata frumos, dar ideea de bază este doar în câteva linii de cod, am putut valida modelul nostru, asigurați-vă că anumite domenii nu erau goale, și dacă ceva nu a mers bine, apoi să se întoarcă un fel de mesaj de eroare Am putea prezenta apoi înapoi la utilizator. Puteți personaliza, de asemenea, validarea dvs. astfel încât să puteți avea de fapt, un mesaj de eroare care este mai specific la cererea dumneavoastră sau ceva de genul asta. Tot ceea ce este, în general, personalizabil. Din păcate, suntem în criză de timp, așa că am de gând să trebuie să taie în direct sesiunea de codificare aici. Există o mulțime de alte caracteristici pe care vreau sa demonstrez pentru tine în acest exemplu. De exemplu, puteți adăuga template-uri pentru site-ul dvs., deci poate că există un fel de cod HTML pe care doriți să se aplice pentru fiecare pagina din site-ul dvs., și în loc de lipire care în fiecare vizualizare fișier aveți, care, evident, ar fi o practică rău, puteți defini practic aceste template-uri, și apoi în controlerul spune, "Bine, eu sunt, folosind acest model." "Au toate opiniile mele folosi acest șablon." Și ultima lucru pe care vreau să vă demonstrez, precum și că nu avem timp este cross-site scripting, și, practic, cred că voi ați văzut, probabil, în CS50 - Cred că David Malan, probabil, a vorbit despre modul în care puteți injecta, de obicei, Cod JavaScript în - ați vorbit despre asta? Poate? Poate nu? Dar, de multe ori vă puteți injecta cod malitios JavaScript în baza de date cuiva, și în cazul în care nu se pot sustrage că în mod corespunzător, atunci când acestea prezintă datele înapoi la utilizator, atunci se poate rula un fel de cod aleatoriu JavaScript nu vrei să se întâmple, și am fost de gând pentru a demonstra cum ai face asta în Kohana. Este de fapt foarte, foarte usor. Aș putea face chiar acum în 2 secunde literalmente. Tot ce trebuie să faceți este de fapt încheie aceste lucruri în acest lucru numit entități HTML. Și că va scăpa în mod automat toate caracterele în mod corespunzător și asigurați-vă că nu obține această problemă. [Student] Ai scris incorect primul test. [Brandon Liu] Oh, Oops. Bine, asta e tot ce am avut de a împărtăși cu tine pentru ziua de azi. Aceste slide-uri vor fi postate, dar acestea sunt, în general, numai resursele ar trebui într-adevăr nevoie pentru a începe cu Kohana. Puteți merge la site-ul web. Ei au un ghid de utilizare, și au, de asemenea, un explorator API. Putem explora toate diferite funcții și funcții helper care le au pentru tine. Ei au, în general, suficiente informații cu privire la site-ul web pe care le puteți folosi pentru a începe și să plec cu Kohana. Nu sunt atât de multe tutoriale, cred, pentru Kohana, in afara de ceea ce au pe site-ul de aici, așa că acest lucru este, probabil, cel mai bun pariu. Dar, dacă vrei să mergi cu cadrul de web și nu doriți să aibă de a ridica un nou limbaj, si tu vrei ceva care este relativ ușor și are o curbă de învățare ușoară, Aș sugera siguranta Kohana. Acesta este probabil cel mai bun jertfa pentru asta. Lucru amuzant, totuși, este dacă am fost folosind Ruby on Rails, am putea fi replicat ceea ce am făcut și, probabil, mai mult în sub 3 minute. Nici o gluma, dar de învățare Ruby on Rails durează mult mai mult decât ar fi nevoie pentru a învăța Kohana. Este practic alegerea pe ceea ce doriți să alegeți să învețe, dar dacă vrei să te ridici și să fie difuzate mai repede, Kohana este cu siguranta o alegere foarte buna. Orice ultimele întrebări înainte de a termina? Da. [Student] Cum ne-ar integra că într-un cadru CSS ca tine utilizați când ați fost instrucție? Întrebarea este cum ne-ar integra, care cu un cadru CSS? Ce ne-ar face, probabil, este că ar include, probabil, un nou dosar în care ne-ar arunca toate fișierele noastre CSS, și apoi ne-ar adăuga, de asemenea, un nou șablon. În șablonul am includ acele fișiere CSS pentru a vă asigura că ele face referire la fiecare pagina, și atunci când de fapt se scrie HTML, doar să adăugați cursuri adecvate și fleacuri, și, de exemplu, atunci când utilizați ceva de genul forma funcția de ajutor, puteți adăuga mai multe parametri după aceea pentru a specifica ce cursuri doriți să fie atașat la diverse lucruri astfel încât acestea ar putea stilul în mod corespunzător, și asta e de fapt modul în care v-ar merge. Orice alte întrebări? Minunat. Va multumim pentru timpul acordat, și vă mulțumesc că ați venit. Eu nu am fost de gând să adăugați foarte mult altceva, dar un lucru foarte rapid este că nu avem o legătură pentru a forma. Într-adevăr prost. Să adăugăm o - de fapt, din punctul de vedere, blog, index, Să foarte repede adăuga un link care duce la noua pagină, pagina unde putem introduce un nou post. Vom face acest lucru. Ce e frumos este acolo este tot acest grup de funcții ajutătoare HTML care fac lucruri diferite pentru tine, așa că ai văzut deja entitățile funcționa aici, dar au, de asemenea, o funcție numită "ancoră" pe care aveți posibilitatea să tastați în blog / new și spune, "Scrie un nou blog." Și s-ar crea că link-ul pentru tine, și acest lucru pare într-adevăr banal de a face, dar acest lucru este frumos, pentru că presupunem că sunteți în mișcare site-ul dvs. de la un domeniu la altul. Și dacă tocmai ați scris pe adresele URL singur, atunci va trebui să schimbe toate adresele URL. Sau poate l-ați mutat de la un subdirector la un alt subdirector. Tu ar trebui să schimbe toate aceste URL-uri singur, și că nu e distractiv. Puteți folosi această ancoră aici, și puteți schimba domeniu sau prefixul subfolder în fișierul de configurare o dată, și apoi se va aplica ca pretutindeni, iar acest lucru este, din nou, un exemplu foarte bun de nu te repeta, uscare codul afară. Oriunde tu te repeta, încercați și extract într-un fel de fișier de configurare sau la o altă funcție și să-l ocupe de asta pentru tine. Și ultimul lucru pe care am vrut să-ți arăt a fost să presupunem că ne-am întors la acest post, și am compus unele eseu foarte lung, dar am uitat să includă autorul meu. Acum, când am faceți clic pe "Trimite Mesaj" Tocmai am pierdut totul. Nu! Într-adevăr trist. Deci, cum te descurci cu asta? Aceasta este ceea ce facem. Ceea ce facem noi este aici pentru aceste funcții de intrare și zona de text, dacă includem un al doilea parametru, atunci valoarea pe care al doilea parametru va fi ceea ce domeniu va fi inițial populat cu. Ce am putea face este în controler blog-ul nostru, am putea lega o altă variabilă. Spune-i "valori" poate. Și trece în matrice de după, literalmente. Asta înseamnă că, dacă validarea a eșuat, trece să-mi matrice mesaj pe care l-am prezentat la ultima cerere, și în acest fel pot folosi valori de la ultima mea depunerea pentru a repopula câmpurile. Acum pot face ceva de genul valori autor și valori corp, și în acest fel acum, dacă am face niște chestii aleatoare și faceți clic pe "Trimite Mesaj", apoi rămâne acolo. Dar vom rula într-o altă problemă. Care funcționează, dar dacă mă duc la pagina de prima dată, se va prăbuși, și asta pentru că prima dată vom merge la pagina, acest post variabilă nu a fost definit încă. Este nul. Ea nu exista. Și ceea ce vreau să spun este dacă există această cheie, apoi reveni la valoarea de această matrice, dar în cazul în care cheia nu există, apoi întoarce un șir gol. Asta e funcționalitatea vrem aici. Vrem să verificați dacă există cheia înainte de a încerca pentru a accesa matrice, și destul de fericire, Kohana, de asemenea, ne oferă o funcție de ajutor pentru asta. Ei au toată această suită de funcții sub ARR nume, scurt pentru matrice, și ei au o functie numita "ajunge", și puteți trece în matrice, și puteți trece în numele cheii. Apoi, practic, ceea ce va face este să încercați să obțineți acea cheie, dar în cazul în care cheia nu există în matrice, apoi se va întoarce gol, sau se poate specifica, de asemenea, un implicit, cred, ceea ce este frumos. Acum, dacă am face din nou acelasi lucru, atunci veți vedea acum funcționează prima dată în jurul valorii, și din nou, în cazul în care ne-am tip în unele chestii aleatoare și să încerce și să prezinte, apoi rămâne acolo. Și cred că pot, de asemenea, vă arată cum să adăugați un șablon foarte repede. Ce putem face în primul rând este că putem adăuga un nou vedere numit "template.php" în dosarul Views, și ceea ce am de gând să faceți este să am de gând să imprima ceva numit "conținut" care va fi conținutul meu principal. Și poate chiar la partea de jos am de gând să adăugați, să zicem, drepturile de autor. [Întrebare elev nu pot fi auzite] [Brandon Liu] Poate că acest lucru este un șablon de bază vreau să utilizeze. Vreau să am un folder cu drepturile de autor pe fiecare pagina, și acum ce am de gând să fac în controlor meu este acum, în loc de a spune, "extinde controler" Am de gând să spun, "se extinde Controller_Template," și acum, în loc de a spune, "organism de răspuns este egal cu acest punct de vedere," Am de gând să spun, "acest conținut șablon este -" și cred - am pus semnul egal? Am uitat. Da, m-am gândit așa. Și acum am stabilit că variabila de conținut pentru a egala de vedere. Eu pot face același lucru aici. Și acum, dacă eu refresh, puteți vedea acum se adaugă acest drept de autor acolo, și chiar face unele mesaj aleatoriu, și apoi, din nou, ar trebui să vedeți că dreptul de autor este în partea de jos a paginii. Mare. Asta e tot ce am vrut să-ți arăt băieți. [Aplauze] Orice întrebări? [CS50.TV]