[Seminar] [Kohana: Lagani PHP Framework] [Brandon Liu] [Harvard University] [To je CS50.] [CS50.TV] Pozdrav svima. Moje ime je Brandon. Ja sam junior ovdje na faksu radi računalne znanosti, a danas ćemo govoriti o Kohana, što je PHP web development okvir. Danas će biti uživo kodiranja seminar, pa ja sam zapravo će potrošiti 5-10 minuta objašnjavajući što Kohana je, i onda sam doslovno ću izgraditi super jednostavan blog za tebe ovdje doslovno od nule. Mi ćemo preuzeti kod sa web stranice Kohana, i da ćemo početi graditi blog, i nadam se da ćete biti vrlo poučna, zato što ćete vidjeti, možda ću možda napraviti neke pogreške, a vi ćete me vidjeti kako se oporaviti od njih, ili ćete vidjeti moj misaoni proces kao što sam izgraditi kroz ovaj blog, A u međuvremenu, također ćete se upoznati sa samim okvirima. Nadam se da će biti vrlo poučna vježba. Prvo, točno ono što je okvir? Ako ste uzimanje CS50 do sada, niste stvarno radio s bilo okviri još, a što je ovo. Vjerojatno ste učinili jednom izradu web pset već, i recimo da i dalje graditi web stranice i držati izgradnju web stranice. Vi ćete početi primjećivati ​​nekoliko stvari. Prva stvar koju ćete primijetiti je da vjerojatno radimo iste stvari iznova i iznova sve vrijeme, stvari kao što su čišćenje korisničkih ulaznih podataka, stvari kao što su organiziranje datoteka na određeni način. Druga stvar koju ćete vjerojatno primijetiti je da je vaš broj može početi postati vrlo, vrlo neuredan, i možete ga ostaviti u neredu i samo imati vrlo teško vrijeme održavanja, ili možda početi strukturirati svoj kod i što je modularna na određeni način da bi ga više održiv. Ovo je mjesto gdje web okviri osnovi ušla Ti ljudi koji su gradili puno web stranica, rekli su, "Ne trebamo ponoviti to svaki put smo izgraditi web stranice." "Zašto ne bismo napraviti paket koji radi sve te stvari za vas svaki put kada želite izgraditi web stranice? " I tako da kada napravite novu web stranicu, vi samo usredotočiti na ono što je točno ovaj website je oko. Ne morate ponoviti sve različite konfiguracije i razdvajanje kodova i prepisivanja koda da se često morate učiniti kada ste izradu web stranice. Ideja je da se okvir omogućuje da napisati kôd na višoj razini bez brige o detaljima na nižoj razini. Nižoj razini detalja moglo biti nešto slično bave čišćenje korisničkih ulaznih podataka. To je nešto što vam stvarno ne treba brinuti o tome. Trebali bi se usredotočiti na ono što vaše web namjena je zapravo o tome. To eliminira puno predloženi koda. To je arhitektura za svoj projekt. Najpopularniji jedan će biti Model-View-Controller, što ću govoriti o za sekundu. I puno puta ove okviri utjelovljuju skup postupaka, Pravila i najbolje prakse za korištenje tako da kada se usvoji web okvir morate napisati svoj kod na određeni način, i to je općenito dogovoren set principa od strane zajednice koja je općenito prihvaćeno da se Dobar način pisanja koda. To čini kod više održiv, više koristiti, tako dalje i tako dalje. I na kraju, što želim naglasiti o okvirima u odnosu knjižnicama je ova ideja o inverziji kontrolom, a što je ovo. Razlika između knjižnice i okvir je da se s knjižnicom još uvijek pišete glavni program, i ti si vrsta zazivajući knjižnicu i pozivajući knjižnici nešto učiniti za tebe. Razlika između knjižnice i okvir je da okvir započinje s kontrolom, i to zaziva svoj kôd, pa možete misliti o njemu kao - to je razlog zašto se to zove okvir - okvir pruža ovaj okvir i strukture za svoj kod, i popuniti rupe, a to će biti očitiji u sekundi kad me vidiš početi pisati kod u kontekstu okvira. Vi ćete vidjeti da sam popunjavanja praznine, i okvir vrsta kontrolirajući sve pokretne dijelove, i moram staviti komada na pravim mjestima. Danas ćemo govoriti o Kohana, koji je jedan od mnogih PHP okvira. Postoje web okviri, a tu su i one u gotovo svakom pojedinom jeziku, i Hvatam Kohana jer Kohana je nedvojbeno i općenito priznat kao najlakši PHP okvira kako bi pokupili. To je najčešće lagana. Ima i drugih one vani koje dolaze s mnogo, mnogo više mogućnosti, ali oni imaju tendenciju da se više teško pokupiti. I na kraju, Kohana koristi MVC arhitekture. To je dovoljno lagan da smo doslovno može izgraditi projekt upravo ovdje ispred tvojih očiju, a možete i prilično pratiti uz prilično lako. Što je MVC arhitekture? Ona se zalaže za Model-View-Controller, a možda, ako mislite o kodu ste pisali do sada za neke od vaših web razvoj psets možda ćete moći vidjeti neke od ovoga, ali obično kada počnete pisati složeniji web aplikacija, podjela između tih triju segmenata postaje sve očitije. Ja izložio MVC ovdje nekako kao stog, i često ćete čuti kako ljudi razgovaraju o hrpama u izradu web stranica, a to je da ilustriraju ideju da svaki sloj, svaka komponenta zapravo pokušava komunicirati samo između 2 ostalih komponenti. Netko pristupa vaše web stranice kao klijent ili preglednik. Oni su u interakciji sa svojim programom kroz pogled koda. Pogled koda komunicira sa kontrolerom. Regulator interakciju s modelom, i modela u interakciju s SQL baze podataka. I nema hopping između ako pišete svoj kod ispravno. Što ove stvari učiniti? Model suštini je dio koda koji se bavi svojim podacima. Sve što se bavi s bazom podataka, s predmetima koji pohranjuju, ili dohvaćanje one objekte u bazi podataka, da sve se barata modelu. Možda imate objekte u bazi podataka. Mi ćemo stvoriti model koji se odnosi na radna mjesta, pa poslije može imati neke atribute na njega. Možda ćete morati funkcije oko odlaganje onih postove ili dohvaćanje postove ili filtriranje postove i tako dalje i tako dalje, i to je sve kod koji se barata modelu. Regulator je vrsta aplikacija logike, i puno različitih stvari može ići u logiku aplikacije. Ako ste u razgovoru s drugom API, da mogu biti tamo gdje ste se bave s logikom aplikacije. Ako pokušavate morati dovesti u podataka iz više različitih modela i imaju ih kombinirati na neki način, koji često može biti obrađene od strane regulatora. Na primjer, na Facebook-u, ako je netko prijatelj, onda možda taj čin uspostave taj odnos može biti učinjeno od strane regulatora. I na kraju, pogled je kod koji se generira ono što zapravo vidi. Puno puta mislim u CS50 psets oni zapravo ne potiču dečki odvojiti te tri stvari. Vjerojatno ćete imati ovaj veliki, dugo datoteke gdje na vrhu što bi neki SQL upita i možda napraviti neke obrade na podacima koje iz baze podataka, i onda imate svu svoju HTML na dnu. A može se dogoditi da, kao što se otvorilo više i više stranica da ćete imati neki kod ponavljanja, a također, stvar je vaš predmet dobiva stvarno velika i duga i postaje nezgrapan za upravljanje. Razlog zašto MVC je tako dobro smatrati je zbog nekoliko razloga. Prva stvar je nešto što se zove odvajanje pitanja što je ideja da kad imate - idealno 1 dio koda treba napraviti jedan stvar i to jako dobro, i ne bi trebalo kombinirati dijelove koda koji rade nespojivih stvari. Na primjer, pregledati kod i Kljuc, oni stvarno ne moraju biti povezani. Oni ne moraju biti u istim datotekama, pa kad možete, odvojite ih tako da je lako održavati. Druga stvar je kod ponovne upotrebe. Vi svibanj pronaći sebe pisanje isti SQL upita ili radi Na sličan način kako bi se moglo crpiti u 1 funkcije, i to je ideja iza modela i kontrolora, nakon što je u zasebnom funkcije koje možete ponovno koristiti u različitim mjestima u svoj projekt. I na kraju, koji je vezan za sušenje kôd, ili se ne ponavlja, ne ponavljati se. To je vrlo razumljiva u razvoju. Kad god možete, ne želim da se ponovi, jer ako se ponovi,  to je puno skuplji za održavanje. Ako želite promijeniti jedan stvar, morate ga promijeniti posvuda, i to vodi do greške, a to je strašno. Redu. Bilo kakva pitanja do sada oko Kohana uopće? Velika. Sada ćemo zaroniti u živu kodiranja sjednici, i nadamo se da sve ide dobro. Ja ću osnovi graditi ovu stranicu na jednom od mojih udaljenih poslužitelja, i na taj način ti dečki također može vidite web stranice i pristupiti web stranici, i okoliš je bolje konfiguriran od mog udaljenom računalu, jer to je trčanje Linux umjesto OS X. Mi smo doslovno će početi. KohanaFramework.org. Ja ću preuzeti kod sa web stranice. Ja ću kopirati link adresu, ići na moj server, preuzmite ga, i ja ću ga izvući. [Student] Koji je najveći možete napraviti tekst? [Brandon Liu] Je li bolje? [Student] Je li to izvedivo? [Brandon Liu] Da, to je u redu. Ja skinuti ZIP datoteku i raspakirali da u imenik zove Kohana, i da ćemo preimenovati tu CS50-Kohana, i idemo u. Strašan. Ovdje možete vidjeti hrpu različitih datoteka. Većina vas može ignorirati - Nećemo ići kroz svaku datoteku koja je ovdje zbog naših vremenskih ograničenja, ali općenito kada instalirate Kohana, prva stvar koju trebate učiniti je li ide u imenik, a vi ćete zapravo napraviti neke testove okoliša i sitnica kako bi provjerili svoje okoline ispravno postavljena na trčanje Kohana i uvjerite se da je sve u redu. Možete vidjeti i većina stvari prošla, ali uglavnom se uvijek pokrenuti u ovoj jednoj problema gdje se žali da su neki katalog je ne može pisati, te da je zbog neke dozvole. Ne znam koliko ti dečki su naučili o dozvolama datotečnih u CS50, ali ako to ne učinite izradu web stranica, vi ćete izvoditi u tom pitanju puno. Ja ću učiniti za zapisivanje i mislim da imam i to - tamo idemo. Ok, tako da sada možete vidjeti sve što je prošlo, a sada će vam reći da se preimenovati install.php datoteku. Ja ću pomaknuti install.php datoteku na installed.php, i sada, ako sam osvježiti, to mi daje neku pogrešku, a to je gdje dolazi u. ispravljanje pogrešaka Ovo je mjesto gdje možete vidjeti što se zapravo dogoditi. Stvar je, po defaultu, Kohana pretpostavlja da Vaš projekt je u korijenski direktorij svoje domene, pa se očekuje da će na demo.brandonkliu.com. Moramo reći da je to zapravo u podmapi. To je u podmapu naziva CS50 Kohana. Stvar je u tome, to je misinterpreting CS50-Kohana kao nešto drugo, što ću vam objasniti u sekundi. No, trebao bih vam reći da je to nešto što je i za očekivati. Ono što ćemo učiniti je da ćemo ići u tu mapu pod nazivom bootstrap.php, koja je konfiguracija mapu gdje se puno različitih stvari postaviti. Ja otvoriti da gore. Onda možda i jedna od prvih stvari koje ću učiniti je promijeniti vremensku zonu. A onda ćemo vidjeti. Aha! Upravo ovdje. Ima hrpa različitih konfiguracija izreka ovdje, ali jedna tražim je to stvar zove baza URL, i po defaultu sam dobiti ga postaviti na Kohana, ali ja ću to promijeniti do CS50-Kohana, i ja mislim da bi trebao to popraviti. Da, super. Po defaultu, da se vidi da to radi, ona kaže, "Hello World". Odakle vam to? Kako smo dobili do Pozdrav svijetu? Gdje se točno nalazi kod koji je zapravo napisao? Shvatiti da, ja ću predstaviti ovaj koncept nazvan usmjeravanje. Više-manje sve web okviri imaju koncept nazvan usmjeravanja, što je komad softvera koji će mapirati određeni URL na određeni dio koda unutar svog okvira. Na primjer, ako imate neki URL i idete na neki URL poput foo.com / blog / sve što onda okvir će učiniti - ili barem ono što Kohana će učiniti - se da će naći klase pod nazivom kontroler blog, i to će pokrenuti funkciju imenovao akciju sve. Znam ja govorim o klasi i funkcijama, i znam da ti dečki nisu pokriveni klase i funkcije u CS50 još, ali za sada, možete misliti na nastavu samo kao skupinu funkcija, način grupiranja funkcije zajedno. To je zapravo sve što trebate znati. Sada ako pogledamo našu strukturu mapa, unutar primjeni mape postoji još jedan folder naziva klase, a ostale mape su pozvani kontroler i model. Ako pogledate unutar mape Controller, vidimo da je spis pod nazivom Dobrodošli, i možete vidjeti ovdje je klasa zove kontroler Dobrodošli, a je funkcija zove Action Index, i što je to ipak ona postavlja tijelo svog odgovora na Pozdrav svijetu. To je mjesto gdje kod se piše. Drugo pitanje je, dobro, ja ne ići na bla, bla, bla, / welcome / index. Kako sam završiti ovdje? Pa, to je samo zato Ovdje na dnu naše bootstrap datoteke gdje smo postavili naše rute možete vidjeti da su oni postavili neke zadane za vas. Zadana kontroler je dobrodošao. Zadana akcija Indeks. Zato, kada smo stavili ništa tamo automatski otišao u Welcome kontroler i indeks akcija. Sve smisla do sada? Sada, možete učiniti više nego samo ići na upravljaču i određenu radnju. Također možete proći u parametrima na kontroleru. Samo kao primjer, Ja ću dodati još jednu akciju na ovom kontroleru za pokazati. Nazovimo ovu akciju Echo, jer to će vam reći sve što ga daju, i tako ja zapravo idem da zgrabite parametar koji će biti poslana preko mene na program usmjeravanja, i kao što možete vidjeti ovdje, ova linija upravo ovdje, možete vidjeti da je To u osnovi znači da imate kontroler, a imate /, i imate akciju, i imate još /, i da će biti parametri, i zato imamo ovu ime ID unutar zagrada, to znači da smo imenovanja tog parametra ID. Kasnije u mom kontroler kod ako želim zgrabite držite tog parametra, Ja mogu koristiti kod sam napisao, naći parametar nazivom ID. To je ono što sam učinio ovdje, a ja ću se vratiti i reći: "Rekao si" to. I tako sada, ako idem na našoj web stranici, Idem cs50-kohana/welcome/echo/Helloooo-- oh, to je točno. Tu je jedan korak sam izostavio. To je dio live kodiranje ideje. Evo jedna stvar. Idemo vidjeti. Tako obično po defaultu s puno tih web aplikacija morate uključiti ovaj index.php stvar u svoj URL, jer ideja je index.php je vrsta ulazna točka vašeg zahtjeva, ali, naravno, to je vrsta neugodno imati. Vi ne želite imati index.php pojaviti u svoj URL, i gotovo svaki web okvir iz kutije ima taj problem index.php, i tako da ćete morati poduzeti neke mjere koje će se moći ukloniti kako. I tako, u ovom slučaju, što ćemo učiniti je da ćemo koristiti datoteku s imenom. htaccess, i to je nešto što je specifično za Apache web poslužitelj, i to može učiniti stvari kao što prepisati URL-ove i preusmjeravanje URL-ove i tako dalje i tako dalje, i Kohana je lijepo dovoljno pružiti predložak. htaccess da možemo koristiti. Kao što možete vidjeti, tu je sliku tamo zove example.htaccess, i idemo kopirati da bi. htaccess. Idem otvoriti to i urediti ga, a zapravo to ne hrpu različitih stvari. Ključan možda želite pogledati je upravo ovdje. Ideja je da se postavlja ovo pravilo koje kaže, "Dobro, što god upisati, upotrijebiti nesto index.php na to." Možete vidjeti da. . * Zalaže za ništa, slagala ništa, i onda drugi dio je index.php / $ 0, i 0 dolara odnosi se na ono što je prethodno uskladiti. Ima li to smisla? Ali zapravo ključna stvar koju želim promijeniti je promijeniti tu prepisati bazu, što je URL baze. To na neki način pretpostavlja gdje radite od. Ja ću dodati CS50 Kohana na to, i na taj način sada, ako sam maknuti index.php, to bi trebalo raditi, a ja ću dodati neke brojeve da vam pokazati da je to doista uspjelo. Zvuči dobro. Nekih pitanja? [Student] Kako se to znati napraviti 123? Je li to argument? Točno. Možete misliti da je to baš kao argument. No, čudno je stvar, ipak, da je način Kohana to radi se oni ne to učiniti upravo kao argument. Morate ga zgrabite ovako. Morate zgrabite zahtjev objekt i pitati za parametar, koji se pod nazivom ID, i to ime ID dolazi iz tog bootstrap datoteke da sam pokazao ranije, a ime ID je u tim zagrada, a to je kako da zgrabite one parametre. Strašan. Bilo koja druga pitanja? Kao što sam rekao, regulatori, oni nositi aplikacijsku logiku, pa to je jedan primjer gdje možete vidjeti that's - to je vrlo osnovni, ali to je još uvijek logika aplikacije, Ideja grabbing parametar i stvaranja nove niz koji kaže: "Rekli ste blah", a onda pljuju kako vratiti k vama. I uglavnom ono što trebate učiniti je stvoriti različite kontrolere. Možete stvoriti zasebne kontrolere za različite dijelove vaše web stranice. Danas ćemo napraviti vrlo jednostavnu web stranicu, i to će biti vrlo osnovni blog. Idemo napraviti novi kontroler samo za postove u blogu. Ali onda kad bih i dodati komentare na blogu, onda bih vjerojatno želite napraviti novi kontroler za te komentare. Da sam htio dodati korisnike, vjerojatno bih dodati novi kontroler za one korisnike, i općenito, ideja je da svaki put kad imate novi model, Novi objekt podaci da ste se bave, imate jedan kontroler za taj objekt podataka. Danas smo se samo ide na posao s 1 podatkovni objekt, i da će biti postova, , a također možete misliti podataka objekata, kao što odgovara stolovima. Općenito svaka tablica odgovara 1. vrsti objekta podataka, pa nakon stol će imati 1 post model, koji će imati 1 post kontroler odgovara da je, i isto za komentare, isto za korisnike, i tako dalje i tako dalje. I to je opće pravilo. Tu će biti posebni slučajevi gdje se može razlikovati od onoga, ali 90% vremena, to je ono što će se raditi, a ja ću vam pokazati da je ono što ćemo raditi danas. 1 više koncept prije nego što zaronite natrag u kodu, ova ideja objektno relacijskim mapiranje. Vi već učinili za razvoj pset web, i vidjeli ste da ćete napraviti SQL upit, i što god da se vraća za vas su redovi. Možete dobiti ove retke, a vi ih index po nekom imenu, naziv stupca i tablici a to je kako da rade s njim, i to može biti malo težak. No, osim toga, ako imate odnose unutar baze podataka, kao što je, na primjer, ako imam primjedbe i postove, onda možda želim da zgrabite roditelj dužnost komentar. Ako sam koristiti samo retke u SQL-u, onda je sve što mogu dobiti je ID matičnog post i nije stvarna sama poslije. No, kad smo kodiranja, što mi zapravo želimo je da se zapravo zgrabite  Roditelj se postavljati ponekad. Ono objekt relacijskim mapiranje čini se to traje rezultate upita baze podataka i stavlja ga u objektima za vas, koji su puno ljepše raditi s od obične nizovima i redovima. Na primjer, sada kad imam komentar, možda, i želim da zgrabite svoj roditelj post, i ja možda ne komentirati strelicom post, onda će zapravo daj mi poslije objekt odgovara stvarnoj matičnog post, a ne samo neki ID, što bih inače morati koristiti i napraviti još jedan SQL upit da zgrabite post, što je nezgrapan i nepotrebno. I nadalje, po mapiranje svih ovih redaka podataka u objekte, također možete spojiti više funkcija na objekte, Tako je, primjerice, govorio sam o tome kako su razredi suštini grupacije funkcija. Možete misliti da je to tako. Na primjer, možda i ja imam ovaj post objekt, a možda i ja bih želio imati nekakvu funkciju u prilogu da mi u osnovi govori da je nedavno objavljena? Je li to bio objavljen u posljednjem tjednu, istina ili laž? I to je funkcija mogu priključiti na tom objektu, i to je stvarno zgodan da ga imaju na istom mjestu, a tu su i niz različitih funkcija možete stvoriti za te objekte, i to je stvarno lijepo biti u mogućnosti da ga priključiti na klasu, na objekt, a ako ste upravo imali retke koji dolaze iz baze podataka, onda stvarno ne mogu priložiti bilo koju funkciju na to. To je doslovno samo podaci. Sva pitanja o tome uopće? ORMs su vrlo česte web development, a tu su i puno različitih vrsta ORMs, i Kohana ima vlastiti ORM. To je vrlo osnovni, ali ćete dobiti okus kako to izgleda. Idemo stvoriti model za naše blogu, i prvo što mi očito trebate učiniti je stvoriti stvarni stol u našoj bazi podataka zapravo pohraniti svoje podatke za ta radna mjesta. Prvo što ću učiniti je otići na phpMyAdmin. Jeste li vi koristiti phpMyAdmin prije? Ok, super, pa vi momci već znaju što je to, a ja ću stvoriti novu tablicu pod nazivom Kohana postovi, i to će biti jako jednostavna. Morat ću ponovno se prijavite Sve ćemo učiniti danas ima autora i tijelo, Samo neka bude jednostavan. Ja ću stvoriti taj stol, i sada samo moramo tablicu koja predstavlja naše postove s 2 polja za naše autora i našem tijelu. Druga stvar ja ću učiniti sada je konfigurirati svoju web aplikaciju, tako da ne zna kako se povezati s bazom podataka, i to je, opet, je nešto što ćete morati učiniti sa svim web aplikacijama. Morate mu reći korisničko ime i lozinku i ime baze podataka i tako dalje i tako dalje shvatiti kako je zapravo za povezivanje s bazom podataka. U Kohana, imamo nešto što se zove modul baze podataka, iu konfiguracijskom mapu imamo ovu mapu pod nazivom Database, i kao što možete vidjeti, postoji hrpa postavki morate postaviti ovdje to reći što je korisničko ime i lozinka za baze podataka, tako da se zapravo može povezati s njim. A budući da ne želim da ti dečki zapravo znati korisničko ime i lozinka moje baze podataka, Imam sliku gdje sam već sve to postaviti, a ja ću kopirati i zalijepiti ga. Strašan. Ok. Mislim da je sve konfiguracije trebam učiniti, ali vidjet ćemo. I dalje ćemo raditi na tome, a ako se nešto ruši, onda ćemo to popraviti. Ono što ću sada učiniti je da ću stvoriti novi kontroler. Ili zapravo, ispričavam se. Prvo moram napraviti novi model. Ja ću stvoriti novi model pod nazivom Post.php, i što ćemo učiniti je da ćemo ga zvati klase Model_Post. Dobili su neki sintaksa označavanje na, pa kad kažem, "proteže ORM," to je u osnovi neki više objektno-orijentirano programiranje, koji je, nažalost, ti dečki nisu naučili u CS50 još, , ali to je prilično lako pokupiti. To mi daje svu tu dodatnu funkcionalnost koja dolazi u tom paketu ORM, i tako ja dobiti hrpu dodatnih funkcija i sitnica za besplatno, što ćete vidjeti malo u sekundi. Upravo sada zapravo sve što trebate učiniti je napraviti ovu klasu. Ja čak ne trebate napraviti bilo koju funkciju ili ništa, ali ja sam stvorio klasu koja predstavlja stol, i zato što sam Produžili smo ORM klasu, I dobili hrpu stvari za besplatno, tako da za sada ne morate postaviti više ništa gore. I sad ono što ću učiniti je da ću stvoriti novi kontroler, što ću u ime blog.php, i ja ću kopirati preko Welcome kontroler pa ja ne moram upisivati ​​neke stvari, i sada imam za preimenovanje toga. Sada ono što ću učiniti na test kako bi bili sigurni sve radi out, Ja ću zgrabiti prvi post iz moje baze podataka i ispisati tijelo post na zaslonu. Da biste to postigli ono što ću učiniti je prvi ću spremiti postove varijabli, tako što ćemo učiniti je - u Kohana ono što trebate učiniti je da zgrabite poštanski objekt nekako je težak, ali vi morate učiniti ovu stvar zove ORM :: tvornice, a onda prođe u nazivu modela koji želite, i to vraća ORM predmet koji predstavlja taj model. A onda, kao što sam rekao, kad smo proširiti ORM objekt, dobili smo sve ove metode za besplatno, tako da na primjer, smo dobili ovu novu funkciju pod nazivom "pronaći sve" koji se automatski vraća svaki post u bazi podataka, što je prilično povoljno. I sada u tijelu ću se vratiti prvi post i vratiti svoje tijelo. I naravno, moram stvoriti mjesto, pa neka je umetnuti novi post. Ja ću reći, "Brandona, moj prvi post." Strašan. A sada ćemo ići na blogovima i ako sve dobro radi - Oh, to je neka druga glupa dopuštenje file stvar opet. Držite na 1 sekundu. Nekako je apsurdno. Tu smo. Ok. Sredio sam taj problem dozvolu. On je pokušavao stvoriti neke datoteke i neki zapisnik, i dozvole, opet, nisu bili pravilno postavljena, pa sam to napravio pa te datoteke su moguće pisati i izvršna tako da se zapravo mogao prijaviti na stvari. Sada to mi daje još jednu iznimku govoreći: "klase ORM nije pronađena", a to je zato što sam zaboravio još jedan korak. To je loše. U bootstrap fascikl, tu su ti moduli ovdje, koje možete omogućiti ili onemogućiti. To su hrpa različitih mogućnosti koje možete odabrati koristiti roku Kohana, što je vrsta lijepo. Na primjer, oni imaju autentifikaciju modul koje možete koristiti za provjeru autentičnosti korisnika. Oni imaju caching modul, ako želite provesti nekakva caching natrag kraj napraviti aplikacije rade brže i sitnica. Moramo omogućiti bazu podataka i ORM modul, jer kao što sam rekao, mi smo pomoću baze podataka, očito, i mi također trebaju omogućiti ORM modul, jer smo htjeli imati dodatni funkcionalnost, što je lijepo imati. Sve što morate učiniti je maknite te 2 linije, i sada, ako sam osvježiti, to mi je dalo još jednu pogrešku. Ona kaže: "Klasa Model_Post nije pronađena." Sada je to dobar problem imati. Idemo vidjeti. Učinite to javno. No Čekaj. Oh, draga. Ne znam zašto to nije u stanju da se. To je stvarno čudno. Imam ovu klasu ovdje. Mislim da ću morati - oh. Ja sam tako glupa. Zaboravio sam dodati PHP oznaku. To je razlog zašto. Sada ću morati poništiti taj 1 promjena sam upravo učinio. Redu. Tu smo. To je bilo jako glupo. Nisam imao uvodnu PHP oznaku. Ali, kao što možete vidjeti, sad je ispravno, zar ne? Imamo 1 post. Zgrabio mi prvi post, a sada smo ispisati svoje tijelo. Velika. Fantastic. Bilo kakva pitanja do sada? Nope? Ima li pitanja? U redu, tako da smo samo stvorili poslije modela, vrlo osnovni, a mi ćemo dodati neke funkcije kasnije. Možemo dodati provjere valjanosti i filtriranje. Provjera valjanosti su jedna od stvari da okviri riješiti za vas jako, jako dobro, a ja ne mislim da ti dečki su morali to učiniti za svoju CS50 pset, ali ako to ne učinite web razvoj za svoj završni rad, ti si vjerojatno htjeti napraviti neku vrstu provjere valjanosti, kao što ne prazne korisnička imena, možda ima lozinku s najmanje nekom duljine, takve stvari. I to je stvarno težak za provedbu tih stvari po sebi, i gotovo svaki web okvir to radi za vas i omogućuje vam to učiniti u vrlo čist način. A model gdje se u pravilu izražavanje svojih pravila za provjeru valjanosti, jer je potvrđivanju li model je valjan ili ne. Ali za sada, idemo to staviti tek kasnije, i za sad idemo raditi na nekom drugom dijelu, a mi ćemo pokušati napraviti novi pogled koji sadrži popis svih postova. Koraci koji su uključeni u izradu novog akciju za uvrštenje sve postove je da zgrabite popis svih radnih mjesta i onda donijeti popis svih postova kroz pogledom. Upravo ovdje, dovoljno sreću, već uhvatio sve postove koristite ovu prvu liniju, pronaći sve funkcije, a sad što ćemo učiniti je do sada Ja sam izravno postavljanje tijelo odgovoru donošenjem niza, ali sada želim koristiti pogled, i razlika između pogledom i samo radi je s ciljem da mogu imati lijep, veliki HTML predložak, i što mogu učiniti je to pojedinih varijabli prođe , a zatim su pogled automatski popuniti svoj predložak pomoću tih varijabli. Ono što ću učiniti je da ću stvoriti novi pogled, a ja ću imenovati pogled na nešto poput "blog / index" i ja idem na osnovi vezati ovo - ah, što pišem? Moj mozak je negdje drugdje. Idem vezati postove promjenjive na pogled, pa na taj način pogled ima pristup ovom post varijablu. I sad moram napraviti ovaj pogled, Dakle, ovdje imamo tu mapu pod nazivom "Pogledi" i prvo, ja ću stvoriti novu mapu pod tim nazivom "blog." To je lijepo. Na taj način možemo imati lijepo hijerarhiju za naše poglede. A onda ću napraviti drugu datoteku u bilo pod nazivom "index.php". Strašan. Zapravo, da ih oboje imamo ovdje. Izrada pogled datoteku je vjerojatno najjednostavniji dio svega toga, i to su vjerojatno stvari koje ste već upoznati. Mi ćemo napraviti nešto stvarno jednostavan, početi govoreći: "Moj popis blogu." Tada možemo proći, i možemo ponoviti kroz niz postova, zgrabite svaki post i reći nešto poput: - možda dodati liniju a zatim ispisati autora i tijelo. To ima smisla do sada? I neka je vidjeti ako to radi. Ništa se nije dogodilo. Pitam se zašto. Oh, propustio sam jedan korak. Vrlo glupo od mene. Stvorio sam pogled, ali nisam postaviti pogled kao odgovor, tako da ćete morati učiniti 1 više stvar. Vi morate učiniti "ovaj odgovor tijela" i postaviti ga da bude pogled. Tu smo. Mi imamo naslov, a onda imamo post, i samo za slatkiš, neka je umetnite još jedan post tako možemo vidjeti popis. I ubacite ove 2 postove, i sada, ako sam osvježiti stranicu, vidimo sve ove postove ovdje. Da li to smisla do sada? Da, pitanje? Oh, u redu. Kao što možete vidjeti, mi smo bili u mogućnosti odvojiti sve te kodove out u različite dijelove, a onda možete vidjeti da je većina jasno s pogledom koda. Ova datoteka ovdje da zastupa stajalište, to je samo stalo predstavlja podataka, prikaz podataka. Ona dobiva prošao nekakvu podataka, a sve to čini samo se to pokazati. U svim drugim dijelovima koda, nećete morati brinuti o tome bilo što od toga, i slično, tvoj pogled koda ne morate brinuti o tome ništa kako pristupiti bazi podataka i tako dalje i tako dalje, što je jako dobro i čini vaš broj puno više održiv. Kao što sam rekao, pogleda, oni su dinamična u tome to je jedna datoteka, ali to će generirati različite poglede na temelju varijabli što zapravo prolaze u, a osim toga, postoji mnogo različitih pomagač funkcije koje možete koristiti kako bi vam pomoći napisati svoj kod brže, koje ću vam pokazati u samo sekundu. Da. [Student] Pa $ 0 kontroler, zar ne? Ta druga stvar. Pitanje je je $ 0 kontroler? $ 0 promjenjiva sam stvorio upravo ovdje. Prvi sam stvorio pogled. Ja ga dodijeljen nekom varijablu. Onda sam ga uputila u ovoj funkciji, postavite ga kao tijelo odgovor. Ima li to smisla? [Student] Tako je pogled :: tvornica, pogled kao klasu ili knjižnice [nečujan] tvornicu funkcija? Pitanje je o view :: tvornice funkcije, i, zapravo, to je nešto više objektno-orijentirani programski bitno. Vidi se pregled class, a ima i metodu pod nazivom "Tvornica" i to je način da zgrabite objekt koji je pod nazivom "blog / index." I to je još malo za objektno programiranje stuff da ja ne idem u tu previše. Sada je očito, želimo stvoriti nove postove, , ali ne želimo da se to učiniti kroz bazu podataka, tako ćemo stvoriti novu akciju za stvaranje novi post, a tu je puno toga što moramo učiniti. Prvo što ćemo napraviti - neka se borila protiv te stvari jednu po jednu. Prvo što ćemo napraviti je da moramo stvoriti obrazac za umetanje novi post, ali sam isto tako ću dodati novu akciju prvo, tako dodajući nove akcije je jednako lako kao dodajući novu funkciju s vašim kontrolerom, i za sada ću učiniti nešto vrlo osnovni, samo zgrabite ovaj pogled i objaviti ga, samo ga prikazati za vas. I onda sad ću stvoriti novi pogled na sliku, i ja ću početi pisati neke stvari. Što je lijepo o Kohana je da oni pružaju mnogo različitih pomagač funkcije za vas napisati pogled code lakše, i 1 tih pomoćnih funkcija ili pomoćnih modula je oko pisanja oblike. Za pisanje obrazaca, ja stvarno ne moraju izravno pisati svaki HTML sebe. Vi dečki ste napisali HTML forme. Znate kako to može biti jako, jako bolan i težak za pisanje oblika. To nije zabavno, pa na svu sreću, mi u osnovi može napisati obrazac pomoću Kohana-a formirati pomoćne funkcije to učiniti za nas. Idemo u osnovi imaju polja za svaku stvar koju imamo, pa jedan za autora i jedan za tijelima. Mi ćemo imati oznaku, a mi ćemo imati ulaz. I onda napokon, da ćemo imati podnesak. I kao što možete vidjeti, to je mnogo čišći za pisanje od svega toga neuredan HTML, što je baš lijepo. Odobren, postoje druge web okviri koji su ga čak i čišći od toga, ali barem je to bolje od pisanja HTML sebe. Strašan, tako da je ovo što vidite. To je vrsta neredu, pa ću dodati prijelom retka postoji da bi se to izgleda malo ljepše. Pa, naravno, još uvijek izgleda jako, jako loše, ali samo smo usredotočeni na funkcionalnost za sada, a ne na estetiku. Nema vremena za napraviti sve. I kao što možete vidjeti, sada imamo super osnovni oblik, što je baš lijepo. Ovaj kod Rekao bih da je čišći nego pokušava napisati HTML obliku sebe, pa to je lijepo. Što je sljedeće? Sada moramo raditi stvari sa akcije. Obično kad pišete HTML forme, morate to reći gdje će dostaviti obrazac za. Po defaultu u većini web okvira, podnosi na isti URL, pa stvar je, ako poslati GET zahtjev za / blog / new, treba to vam prikazati formu, ali ako vam poslati post zahtjev / blog / novi s podacima, to bi zapravo trebao pokušati spasiti taj post i učiniti nešto s njim. Što ćemo učiniti je u osnovi sve što morate učiniti da biste provjerili je li to nakon zahtjeva ili GET zahtjev je provjeriti što su poštanski varijabli koje možete podesiti. A ako je postavljen nakon promjenjive, onda ćemo pokušati stvoriti novi post. Opet, samo smo to učinili, i da stvara novi post, a mi smo doslovno ide postaviti svoja polja kao što je ovaj, i onda ćemo ga spasiti. A onda ću preusmjeriti na naslovnici, tako da oni mogu vidjeti naš popis postova opet. Pokušajmo to. Ja ću reći, "Brandona" a zatim poslati post, i ako sve ide dobro, kao što možete vidjeti, to mi je preusmjeren na naslovnici, a ako sam dođite do kraja, imamo novoobjavljene mjesto. Jupi! Da, pitanje. [Student] Što ako je ušao točno istu stvar ste unijeli prije? Da li to provjeriti kako bi bili sigurni da niste umnožen Isti podnesak? Budite zadano, ne, jer po defaultu - Žao nam je, pitanje je, ako uđete u isti podataka u obliku i tvrde da će to omogućiti da uložite duple objekt, duplicirati zapis, bitno? Upravo sada, da, to će vam omogućiti da to učiniti, jer u bazama podataka to je savršeno vrijedi imati u potpunosti duplicirati redaka, , ali ako je to problem, onda možete dodati provjere valjanosti, primjerice, kako bi bili sigurni da će, ako je to točno isto kao nešto što već postoji, onda kažu da je invalid objekt, a onda čak možete odrediti svoju poruku o pogrešci i kažu, "Invalid jer to već postoji" ili nešto slično. No, u ovom slučaju, ja samo mogu stvoriti nešto duple. Sada ćemo pokušati dodati neke provjere valjanosti. Problem s ovim je to da se Doslovno sam mogao podnijeti potpuno prazno mjesto. Ja mogu kliknuti na ovaj gumb upravo sada, i tamo idemo. Vi stvarno ne mogu vidjeti, ali ovaj dodatni crta ukazuje na to da sam doslovno novi post. To samo ima prazni autora i prazne tijelo, a mi ne želimo da ljudi mogu učiniti. Ovo je mjesto gdje valjanosti dolazi u. Ja mogu ići na moj modela objekta, i sad ja mogu dodati novu funkciju koja određuje ono valjanosti pravila bih trebao dodati na ovaj model kako bi bili sigurni da je to valjan ili da odredite što to znači biti valjana poslije? I želim reći da je to samo vrijedi ako i nakon autor i tijelo nisu prazni, a to je kako to učiniti u Kohana. Možete stvoriti novu funkciju pod nazivom "pravila" a onda zapravo vratiti asocijativni niz koji definira pravila za provjeru valjanosti za ovaj objekt. Idemo se vratiti niz, a zatim ono što ćemo učiniti je kažu "autora", to ide u nizu, koja ide u drugi niz naziva "nije prazan." A onda ću reći "tijelo." Ok, i sintaksa za to i struktura za to može izgledati malo nezgrapan i pomalo komplicirano. Ako ste pročitali dokumentaciju, to je prilično jednostavan za shvatiti, No, u biti to je ono što vam je potrebno učiniti kako bi se odredili neka pravila za provjeru, a tu su i puno različitih pravila da Kohana će vam dati besplatno, kao što možete dodati pravila za reći to mora biti barem ta dužina. Možda to mora biti numerička. Možda to mora biti alfa numerička. Možda to mora biti najviše ta dužina, tako dalje i tako dalje. Ima puno različitih pravila koja Kohana daje za vas, i možete ići na svoje web stranice, pogledajte na dokumentaciju, i možete vidjeti sve različite stvari koje možete učiniti. Ali to je sve što imam za napraviti, a sad ćemo vidjeti što će se dogoditi ako sam podnijeti prazno mjesto. Što će se dogoditi? Oh, ne, ja dobiti greška. Ja dobiti valjanosti iznimka. Pa, to je dobro. Ona mi je rekla da je moj model je valjan, ali ja ne želim prikazati iznimku na moje korisnike kad oni pokušati podnijeti nešto nevažeći, zar ne? Želim im dati nekakvu prijateljskijem pogrešci kad nešto pođe po zlu. Ono što ćemo učiniti je da ćemo zamotajte sve u try catch petlje. Zapravo, mislim da je to također nešto što još nisu naučili u CS50, jer C, programski jezik C, nema iznimke, ali skoro svaki drugom jeziku ima iznimaka, tako jako, jako kratko, Iznimka je nešto što dio koda može baciti iznimku kada nešto pođe po zlu, ali onda možda neki drugi dio koda viši može uhvatiti taj izuzetak i učiniti nešto s njim. Na primjer, u ovom slučaju, dio koda koji pokušava spasiti model, to potvrđuje model, a ako ona kaže: "Dobro, ovaj model nije valjan" to će baciti izuzetak, a to je vrsta ekvivalentno u C možda vratiti -1 ili nešto slično. A onda za mene, ova funkcija, moj broj na višoj razini, mogu pokušati uhvatiti taj izuzetak i, zapravo, reći: "U redu, ako sam uhvatiti izuzetak, što ću učiniti?" Ili bih mogao birati ne bi uhvatiti taj izuzetak i neka netko viši uhvatiti iznimka, ili ako ga nitko ne hvata, onda cijeli program sruši i kaže: "Nešto je pošlo po zlu, a ja ne mogu to podnijeti." No, ono što mi radimo je zamotajte dio koda u try bloku, a onda dodate i nešto što se zove catch blok, koja je vrsta koda koji će pokušati uhvatiti iznimke koje se mogu pojaviti. I tako, ako sam uhvatiti ovaj iznimka ili poništavanje iznimka, onda ono što ću učiniti je Ja ću postaviti pogreške - Mislim da je to kako sam to učiniti - i ja ću postaviti pogreške nekom objektu. A ono što ću učiniti je onda ako ga pogodi ovu iznimku, to neće preusmjeriti, a ako to ne preusmjeri, to će izaći iz ukoliko blogu i pogodio ovaj blog / novi, koji se žele što želim učiniti. Ako postoji pogreška, onda želim da se vrati u obliku i prikazati one pogreške. Sada ono što želim učiniti je želim u one pogreške na prikaz. Dobro, mislim da imaju pogled upravo ovdje, i zapravo želim prikazati one pogreške, ako ih ima. Prije nego što sam pisati HTML za to, ja ću stvarno brzo pokazati što struktura ove pogreške varijabilni izgleda, i to je dobra praksa u cjelini. Mnogo puta ste dobili nešto natrag od neke metode, neka funkcija u web okvira, a vi ne znate što promjenjiva izgleda, , tako da ne znam kako raditi s njim. Ja ću koristiti metodu print r na osnovi ga isprintati. A kao što možete vidjeti, to mi govori da je suradnik niza, i imate ključ, autora, ukazuje na ovom nizu, Autor ne smije biti prazan, i još jedan ključni, tijelo, ukazuje na drugom struna, tijelo ne smije biti prazan. Ja sam kao, ok, super. Onda sam se ponoviti kroz niz i ispisati svaku poruku. To je u osnovi kao asocijativni niz sa hrpom poruka. Ono što ću učiniti je, "ako pogreške" a ja ću stvoriti Popis bez rednih brojeva, a ja ću ponoviti kroz sve pogreške. A to, a sada ću pokušati podnošenja to opet, pa da vidimo što ćemo dobiti. Sada smo dobili ovaj lijepi popis grešaka, i to je još uvijek prilično ružno, ali to očito može biti formiran tako da izgledaju lijepo, ali osnovna ideja je samo u nekoliko linija koda, smo bili u mogućnosti potvrditi naš model, pobrinite se da određene stavke nisu bile prazne, i ako je nešto pošlo po zlu, a zatim se vratiti nekakvu poruku o pogrešci I onda mogao predstaviti natrag korisniku. Također možete prilagoditi svoj valjanosti tako da zapravo mogu imati poruku o pogrešci koji je specifičan na svoj zahtjev ili nešto slično. Sve što je općenito prilagodljiv. Nažalost, mi ponestaje vremena, pa ću morati odrezati uživo kodiranja sjednicu ovdje. Ima hrpa drugih značajki koje želim pokazati za vas u ovom primjeru. Na primjer, možete dodati predloške za svoje stranice, pa možda postoji neka vrsta HTML koda koji želite primijeniti za svaku pojedinu stranicu na svoje stranice, a umjesto da se lijepljenje u svakom pojedinačnom prikazu datoteci imate, što je očito bila bi loša praksa, ti u osnovi može definirati ove predloške, , a zatim je u svom kontroleru reći: "U redu, ja sam koristeći ovaj predložak." "Jesu li svi moji pogledi koristiti ovaj predložak." I jedna posljednja stvar koju želim pokazati vam kako je dobro da nemamo vremena za je cross-site scripting, a zapravo mislim da ti dečki vjerojatno ste vidjeli u CS50 - Mislim da je David Malan vjerojatno govorio o tome kako se obično može ubrizgati JavaScript kod u - jeste li razgovarali o tome? Možda? Možda ne? No, puno puta ste se uvelo zlonamjerni JavaScript kod u nečiju bazu podataka, a ako oni ne pobjegne da ispravno, onda kada su prisutni te podatke natrag korisniku, onda to može pokrenuti nekakvu slučajnim JavaScript kod koje ne želite da se dogodi, i da ću pokazati kako ćeš to učiniti u roku Kohana. To je zapravo jako, jako jednostavno. Mogao bih to učiniti upravo sada u 2 sekunde doslovno. Sve što morate napraviti je u osnovi zamotajte te stvari u ovu stvar zove HTML entitete. I to će se automatski pobjeći sve znakove ispravno i pazite da ne dobijete taj problem. [Student] Vi upisali prvi test. [Brandon Liu] Oh, pardon. Dobro, to je sve što sam morao podijeliti s vama za danas. Ovi slajdovi će biti objavljena, ali to su uglavnom jedini izvori stvarno treba da biste započeli s Kohana. Možete otići na web stranicu. Oni imaju korisnički vodič, i oni također imaju API Explorer. Možemo istražiti sve različite funkcije i pomoćne funkcije koje imaju za vas. Oni uglavnom imaju dovoljno informacija na stranicama koje možete koristiti da biste započeli i krenuti s Kohana. Tu se ne da mnogi tutoriali, mislim, za Kohana, izvan što oni imaju na web stranici ovdje, tako da je ovo vjerojatno vaš najbolji kladiti. No, ako želite ići s web okviru a vi ne želite da se moraju podići novi jezik, i želite nešto što je relativno lagan i ima jednostavno krivulja učenja, Ja bi svakako predlažemo Kohana. To je vjerojatno najbolja ponuda za to. Smiješno je što je, međutim, ako smo koristili Ruby on Rails, mogli smo ponoviti ono što smo upravo učinio a vjerojatno i više za manje od 3 minute. Nije šala, ali učenje Ruby on Rails traje puno duže nego što bi se naučiti Kohana. To je u osnovi vaš izbor o tome što želite izabrati naučiti, ali ako želite da biste dobili gore i trčanje brzo, Kohana je definitivno jako dobar izbor. Bilo zadnja pitanja prije nego što smo završili? Da. [Student] Kako bi se integrirali smo da u CSS okvira kao što ste koristili kada su naložio? Pitanje je kako bi se integrirali smo da s CSS okvira? Ono što će vjerojatno učiniti je da će vjerojatno uključivati novu mapu gdje ćemo baciti sve naše CSS datoteke, i onda mi također bih dodati novi predložak. U predlošku ćemo uključiti te CSS datoteke kako bi bili sigurni da ste upućuje na svaku pojedinu stranicu, i onda kada su zapravo pisanje HTML-a, ti samo dodati odgovarajuće razrede i sitnica, a za primjer, kada koristite nešto poput obliku pomagač funkcije, možete dodati više parametara poslije navesti što razredi želite biti vezan za razne stvari kako bi se oni mogli oblikovati ispravno, a to je zapravo kako će ići. Neko pitanje? Strašan. Hvala vam na vašem vremenu, i hvala vam što ste došli. Nisam namjeravao dodati jako puno ostalo, ali 1 stvarno brzo stvar je što nemamo vezu u obliku. Stvarno glupo. Dodajmo - zapravo u prikazu, blog, indeks, neka je stvarno brzo dodati link koji ide na novu stranicu, stranica na kojoj možemo ubaciti novi post. Mi ćemo to učiniti. Ono što je lijepo je tu je cijela ova skupina HTML pomagač funkcije koji rade različite stvari za vas, tako da ste već vidjeli entitete funkcionirati ovdje, ali oni također imaju funkciju pod nazivom "sidro" koje možete upisati u blog / new i kažu, "Post novi blog." I to bi stvorili tu vezu za tebe, i to izgleda jako trivijalna za napraviti, ali to je lijepo, jer pretpostavljam da se kreće vaše web stranice od 1. domene na drugu. A ako ste upravo napisala URL-ove se, onda će morati mijenjati sve URL-ove. Ili možda ste ga preselili iz jedne u drugu podfolderu podmapu. Ti bi trebala promijeniti sve te URL sebe, i da nije zabavno. Možete koristiti ovaj sidro upravo ovdje, i možete promijeniti domenu ili podmape prefiks u datoteci s jednom, i onda će se podnijeti zahtjev da se svugdje, a to je, opet, veliki primjer ne ponavljati se, sušenje kôd out. Gdje god se ponavlja, pokušati izvući u nekakvu datoteku postavki ili u neku drugu funkciju i to srediti za vas. I zadnja stvar koju sam želio pokazati je Pretpostavljam da smo se vratili na ovaj post, i sam skladao neke stvarno dugo esej, ali zaboravio sam da su moje autora. Sada, kada sam kliknite na "Pošalji Post" Upravo sam izgubio sve. Ne! Stvarno tužno. Pa kako se nositi s tim? To je ono što mi radimo. Ono što mi radimo je ovdje za te ulaznih i područje teksta funkcija, ako su drugi parametar, tada je vrijednost tog drugog parametra će biti ono polje će u početku biti naseljeni. Ono što bismo mogli učiniti jest u našem blogu kontroler, bismo mogli vezati drugi varijablu. Nazovite to "vrijednosti" možda. I prođe u post polje, doslovno. To znači da, ako valjanosti nije uspjela, prođe mi posta niz koji sam podnijela od zadnjeg zahtjeva, i na taj način mogu koristiti vrijednosti iz mog zadnjeg podnošenja da repopulate polja. Sada mogu učiniti nešto poput vrijednosti autora i vrijednosti tijela, i na taj način sada, ako sam napraviti neki slučajni stvari i kliknite na "Pošalji Post", onda to ostaje tamo. Ali ćemo upasti u još jedan problem. To radi, ali ako idem na stranici za vrlo prvi put, to će se srušiti, a to je zato što je prvi put idemo na stranici, ovaj post varijabla još nije definirana. To je null. Ne postoji. A ono što želimo reći je li to ključ postoji, zatim se vratiti vrijednost ovog polja, ali ako ključ ne postoji, a zatim se vratiti prazan string. To je funkcija želimo ovdje. Želimo da provjerite je li ključ postoji prije pokušava pristupiti niz, i dovoljno sreću, Kohana nam također daje pomoćne funkcije za to. Imaju cijeli ovaj paket funkcija pod nazivom ARR, kratko za niz, i oni imaju jedan funkciju pod nazivom "dobiti" i možete proći u nizu, i možete proći u ime ključa. Zatim osnovi ono što će učiniti je da će pokušati dobiti taj ključ, ali ako taj ključ ne postoji u polju, onda će se vratiti prazan, ili možemo navesti zadanu, vjerujem, što je lijepo. Sada, ako ćemo napraviti istu stvar opet, onda vidite sada to radi prvi put okolo, a opet, ako mi tip u nekom slučajnom stvari i pokušati podnijeti, onda to ostaje tamo. A valjda sam i mogu vam pokazati kako dodati predložak jako brzo. Ono što možemo učiniti prvi je možemo dodati novi prikaz pod nazivom "template.php" u Pregleda mape, i ono što ću učiniti je da ću ispisati nešto što se zove "sadržaj" koji će biti moj glavni sadržaj. A možda na samom dnu ću dodati, recimo, autorskih prava. [Nečujan student Pitanje] [Brandon Liu] Možda je ovo super osnovni predložak želim koristiti. Želim imati mapu s moje autorsko pravo na svaku pojedinu stranicu, i sad ono što ću učiniti u roku od mog kontrolora Sada je, umjesto da se kaže, "proteže kontroler" Ja ću reći, "proteže Controller_Template" i sad umjesto da se kaže, "odgovor tijela je jednaka tom pogledu" Ja ću reći, "ovaj sadržaj predložak je -" i ja mislim - mogu staviti znak jednakosti? Zaboravim. Da, ja sam tako mislila. I sada sam postaviti da varijabilna sadržaj jednak pogled. Ja mogu učiniti isto ovdje. A sada, ako sam osvježiti, možete vidjeti da je sada to autorsko dodaje postoji, i samo bi neki slučajni post, a onda, opet, trebali biste vidjeti da je autorsko pravo na samom dnu stranice. Velika. To je sve što sam htjela pokazati dečki. [Aplauz] Ima li pitanja? [CS50.TV]