[Seminaar] [Kohana: 'n liggewig PHP raamwerk] [Brandon Liu] [Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] Hi almal. My naam is Brandon. Ek is 'n junior hier by die kollege doen rekenaarwetenskap, en vandag gaan ons om te praat oor Kohana, wat is 'n PHP web ontwikkeling raamwerk. Vandag gaan 'n live kodering seminaar te wees, so ek basies gaan 5-10 minute te spandeer verduidelik wat Kohana is, en dan is ek letterlik gaan 'n super eenvoudige blog te bou vir jou reg hier letterlik van die grond af. Ons gaan die kode te laai van die Kohana webwerf, en ons gaan om te begin bou van 'n blog, en hopelik sal dit baie leersaam wees, want jy sal dalk miskien sien ek 'n paar foute maak, en jy sal sien my herstel van hulle, of jy my gedagte proses sien as ek bou deur middel van hierdie blog, en intussen, sal jy ook vertroud is met die raamwerk self. Hopelik sal dit 'n baie leersame oefening wees. Eerstens, wat presies is 'n raamwerk? As jy is wat CS50 so ver, het jy nie regtig gewerk met enige raamwerke nie, en die saak is dit. Jy het waarskynlik reeds gedoen 1 web ontwikkeling pset, en kom ons sê jy bly webtuistes te bou en hou die bou van webwerwe. Jy sal begin met 'n paar dinge om te sien. Die eerste ding wat jy sien, is dat jy waarskynlik doen dieselfde dinge oor en oor weer al die tyd, dinge soos die skoonmaak van die gebruiker se toevoer van data, dinge soos die organisering van jou lêers in 'n sekere manier. Die ander ding wat jy sal waarskynlik ook let is dat jou kode kan begin om 'n baie, baie slordig, en jy kan dit laat slordig en het net 'n baie harde tyd die handhawing van dit, of jy kan begin om jou kode te struktuur en maak dit modulêre in sekere maniere om dit meer onderhou te maak. Dit is waar web raamwerke basies ingekom Hierdie mense wat 'n baie van die webwerwe gebou het, het hulle gesê, "Ons hoef nie dit te oordoen elke keer wat ons bou 'n webwerf." "Hoekom moet ons maak net nie 'n pakket wat doen al hierdie dinge vir jou elke keer wat jy wil 'n webwerf te bou? " En so dat wanneer jy 'n nuwe webwerf, jy net fokus op wat presies hierdie spesifieke webwerf is. Jy hoef nie al die verskillende verstellings te herhaal en die skeiding van kodes en herskryf kode dat jy dikwels te doen wanneer jy maak webtuistes. Die idee is dat 'n raamwerk kan jy 'n hoër vlak kode te skryf sonder om te bekommer oor die laer-vlak details. 'N laer vlak detail kan iets soos die hantering van die skoonmaak van die gebruiker se toevoer data. Dit is iets wat jy moet nie regtig nodig om te bekommer nie. Jy moet fokus op wat jou web toekenning is eintlik oor. Dit elimineer 'n baie boiler-kode. Dit is 'n argitektuur vir jou projek. Die gewildste een sou wees Model-View-Controller, wat ek gaan om te praat oor in 'n tweede. En 'n baie keer hierdie raamwerke verpersoonlik 'n stel prosedures, reëls, en die beste praktyke vir jou om te gebruik sodat wanneer jy neem die web raamwerk jy het jou kode in 'n sekere manier te skryf, en dit is in die algemeen 'n ooreengekome stel beginsels deur die gemeenskap wat algemeen aanvaar word 'n goeie manier van skryf kode. Dit maak jou kode meer te onderhou, meer bruikbare, so aan en so voort. En laastens, die ding wat ek wil beklemtoon oor raamwerke versus biblioteke is hierdie idee oor inversie van beheer, en die ding is dit. Die verskil tussen 'n biblioteek en 'n raamwerk is dat met 'n biblioteek jy is nog steeds die skryf van die belangrikste program, en jy is soort van die oproep van die biblioteek en 'n beroep op die biblioteek om iets te doen vir jou. Die verskil tussen 'n biblioteek en 'n raamwerk is dat die raamwerk begin met die beheer, en dit roep jou kode, sodat jy kan dink dit - dit is die rede waarom dit is bekend as 'n raamwerk - die raamwerk bied hierdie raam en struktuur vir jou kode, en jy in die gate te vul, en dit sal meer duidelik geword in 'n tweede wanneer jy my sien begin kode binne die konteks van die raamwerk te skryf. Jy sal sien dat ek die invul van die gapings, en die raamwerk is 'n soort van die beheer van al die bewegende dele, en ek het die stukke te plaas op die regte plekke. Vandag gaan ons praat oor Kohana, Dit is een van die vele PHP raamwerke. Daar is web raamwerke, en daar is mense in feitlik elke enkele taal, en ek pluk Kohana omdat Kohana is waarskynlik en oor die algemeen erken as die maklikste PHP raamwerk te haal. Dit is die mees liggewig. Daar is ander mense daar buite wat kom met baie, baie meer funksies, maar hulle is geneig om meer moeilik om te haal. En uiteindelik, Kohana gebruik die MVC argitektuur. Dit is liggewig genoeg dat ons letterlik kan bou 'n projek reg hier, reg voor jou oë, en jy kan pretty much volg saam redelik maklik. Wat is die MVC argitektuur? Dit staan ​​vir Model-View-Controller, en miskien as jy dink oor die kode wat jy het tot dusver skryf vir 'n paar van jou web ontwikkeling psets kan jy dalk 'n paar van hierdie om te sien, maar gewoonlik wanneer jy begin skryf 'n meer komplekse web aansoek, die verdeling tussen hierdie 3 segmente raak meer en meer duidelik. Ek het die MVC hier soort van as 'n stapel, en dikwels sal jy hoor mense praat oor stapels in die web-ontwikkeling, en dit is die idee om te illustreer dat elke laag, elke komponent regtig probeer om net te kommunikeer tussen 2 ander komponente. Iemand toegang jou webwerf as 'n kliënt of 'n leser. Hulle interaksie met jou program deur die oog kode. Die uitsig kode wisselwerking met die kontroles. Die bestuurder is in wisselwerking met die model, en die model in wisselwerking met die SQL databasis. En daar is geen hopping tussen as jy jou kode behoorlik skryf. Wat het hierdie dinge doen? Die model is in wese die stukkie van die kode wat handel oor jou data. Enigiets wat handel oor jou databasis, met die voorwerpe wat jy stoor, of te herwin die voorwerpe in die databasis, Dit is al wat hanteer word deur die model. Miskien het jy 'voorwerpe in jou databasis. Ons gaan 'n model wat te doen het met poste te skep, so 'n pos kan 'n paar eienskappe om dit te. Jy mag funksies het om die stoor hierdie poste of te herwin poste of die filter van die poste en so aan en so voort, en dit is al die kode wat hanteer is deur die model. Die bestuurder is 'n soort van die aansoek logika, en 'n baie verskillende dinge kan gaan in die aansoek logika. As jy praat met 'n ander API, wat kan wees waar jy met die program logika. As jy probeer om te bring in die data uit verskeie verskillende modelle en om hulle te kombineer in een of ander manier, wat dikwels deur die kontroleerder hanteer word. Byvoorbeeld, op Facebook, as jy iemand vriend, dan miskien daardie Wet van die stigting van die verhouding kan gedoen word deur die bestuurder. En uiteindelik, die uitsig is die kode wat is die opwekking van wat jy eintlik sien. Daar is baie keer dink ek in die CS50 psets hulle nie regtig moedig jy nie ouens hierdie 3 dinge te skei. Jy sal waarskynlik hierdie groot, lang lêer waar die top jy maak 'n paar SQL navraag en miskien doen sommige verwerking op die data wat jy in die databasis, en dan moet jy al jou HTML aan die onderkant. En jy mag vind dat as jy meer en meer bladsye skep dat jy gaan 'n paar kode herhaling te hê, en ook, die ding is jou lêer kry werklik 'n groot en lang en raak lomp te bestuur. Die rede waarom MVC is so goed beskou is vir 'n aantal redes. Die eerste ding is iets genoem skeiding van kommer wat is die idee dat wanneer jy - ideaal 1 stuk kode moet 1 ding doen en doen dit baie goed, en jy moet nie kombineer stukke van die kode wat dit doen uiteenlopende dinge. Byvoorbeeld, sien die kode en model kode, hulle het nie regtig verwant. Hulle het nie te wees in dieselfde lêers nie, so as jy kan, skei hulle uit so dit is maklik om te handhaaf. Die ander ding is die kode hergebruik. Jy kan vind jouself skryf dieselfde SQL navraag of doen soortgelyke navrae wat in 1 funksie onttrek kan word, en dit is die idee agter modelle en leiers, om dit in 'n aparte funksie wat jy kan onthou in verskillende plekke in die projek. En uiteindelik, dit is gekoppel aan droog jou kode, of nie jouself herhaal, moenie jouself herhaal nie. Dit is baie verstaanbaar in ontwikkeling. Wanneer jy kan, jy wil nie om jouself te herhaal, want as jy jouself herhaal,  dit is baie duurder om in stand te hou. As jy wil 1 ding om te verander, moet jy dit oral te verander, en dit lei tot foute, en dit is verskriklik. Alle regte. Enige vrae dusver oor Kohana by almal? Groot. Nou gaan ons om te duik in die lewe kodering sessie en hopelik alles goed gaan. Ek gaan basies bou hierdie webwerf op een van my afgeleë bediener, en die manier wat jy ouens kan ook sien die webwerf en toegang tot die webwerf, en ook die omgewing is beter geconfigureerd as my afgeleë masjien, want dit loop Linux in plaas van OS X. Ons is letterlik gaan om te begin. KohanaFramework.org. Ek gaan die kode te laai vanaf die webwerf. Ek gaan die skakel adres te kopieer, gaan na my bediener, laai dit, en ek gaan om dit te ontgin. [Studente] Wat is die grootste wat jy kan die teks maak? [Brandon Liu] Is dit beter? [Studente] Is dit uitvoerbaar? [Brandon Liu] Ja, dit is goed. Ek afgelaai 'n zip-lêer en oopgemaak wat in 'n gids genoem Kohana, en ons gaan dit CS50-Kohana te hernoem, en laat ons gaan in Awesome. Hier sien jy 'n klomp van die verskillende lêers. Die meeste van julle kan ignoreer - we're nie van plan om te gaan deur elke enkele lêer wat in hier as gevolg van ons tyd beperkinge, maar oor die algemeen as jy Kohana, die eerste ding wat jy doen installeer is jy na die gids, en jy sal basies doen 'n paar toetse omgewing en noem maar op om seker te maak jou omgewing goed is ingestel Kohana te hardloop en maak seker dat alles reg is. Jy kan sien die meeste dinge geslaag het, maar oor die algemeen het jy altyd loop in die 1 probleem waar dit kla dat sommige Gids is nie skryfbaar nie, en dit is as gevolg van 'n paar regte. Ek weet nie hoeveel julle geleer het oor die permissies in CS50, Maar as jy dit doen web-ontwikkeling, jy gaan om te loop in hierdie kwessie 'n baie. Ek gaan dit skryfbaar te maak en ek dink ek het ook nie - daar gaan ons. Goed, so nou kan jy alles sien geslaag het, en nou is dit sal jou vertel die install.php lêer te hernoem. Ek gaan die install.php lêer te skuif na installed.php, en nou as ek verfris dit gee my 'n paar fout, en dit is waar die ontfouting kom in Dit is waar jy kan sien wat eintlik gaan gebeur nie. Die ding is, by verstek, Kohana aanvaar dat jou projek is aan die wortel gids van jou domein, sodat dit verwag om te wees op demo.brandonkliu.com. Ons het dit te vertel dat dit is eintlik in 'n subgids. Dit is in 'n subgids genoem CS50 Kohana. Die ding is, is dit verkeerd geïnterpreteer CS50-Kohana as iets anders, wat ek in 'n tweede aan u sal verduidelik. Maar ek moet jou vertel dat is iets wat verwag kan word. Wat ons gaan doen, is ons gaan om te gaan in hierdie gids genoem bootstrap.php, wat is die opset gids waar 'n baie verskillende dinge stel. Ek oop te maak. Dan miskien een van die eerste dinge wat ek sal doen, is om die tydsone het verander. En dan laat ons sien. Aha! Net hier. Daar is 'n klomp van die ander opset woorde hier, maar die een wat ek soek, is hierdie ding genaamd basis URL, en by verstek ek dit kry ingestel op Kohana, maar ek gaan om dit te verander na CS50-Kohana, en ek dink dat dit moet regmaak. Ja, groot. By verstek, om te sien dat dit werk, dit sê, "Hello World." Waar het dit vandaan? Hoe het ons tot Hello World? Waar presies is die kode wat eintlik geskryf het dat? Om dit te verstaan, sal ek hierdie konsep genoem routing stel. Pretty much al die web raamwerke het die konsep genoem routing, wat is die stuk van die sagteware wat sal 'n sekere URL kaart tot 'n sekere stukkie van die kode in jou raamwerk. Byvoorbeeld, as jy 'n paar URL en jy gaan na 'n URL soos foo.com / blog / al dan wat die raamwerk gaan doen - of ten minste wat Kohana gaan doen - is dit gaan 'n klas met die naam kontroleerder blog te vind, en dit gaan die funksie genoem aksie al uit te voer. Ek weet ek praat die klas en funksies, en ek weet julle het nie gedek klasse en funksies in CS50 nie, maar vir nou, jy kan dink klasse as net 'n groep van die funksies, 'n manier om die groepering van funksies saam. Dit is regtig al wat jy hoef te weet. Nou as ons kyk na ons gids struktuur, binne-in die aansoek gids is daar 'n ander gids genoem klasse, en die ander dopgehou word Kontroleur en model genoem. As jy kyk binne-in die Kontroleur gids, sien ons dat daar 'n lêer genaamd Welkom, en jy kan sien hier is 'n klas met die naam Controller Welkom, en daar is 'n funksie genoem Aksie-indeks, en wat dit doen, is dit stel die liggaam van jou reaksie op Hello World. Dit is waar die kode geskryf word. Die ander vraag is, wel, ek het nie na blah, blah, blah, / verwelkoming / indeks. Hoe het ek hier beland? Wel, dit is bloot omdat hier aan die onderkant van ons bootstrap lêer waar ons ons roetes jy kan sien dat hulle 'n paar standaard vir jou. Die standaard kontroles is welkom. Die standaard aksie is leeg. Dit is hoekom wanneer ons niks in daar is dit outomaties na die Welkom kontroleerder en die indeks Aksie. Alles maak sin so ver? Nou, kan jy meer as net na Controller doen en 'n spesifieke aksie. Jy kan ook slaag in parameters aan die kontroles. Net soos 'n voorbeeld, Ek gaan 'n ander aksie te voeg tot hierdie kontroles om jou te wys. Kom ons noem hierdie aksie Echo, want dit gaan om jou te vertel wat jy dit gee, en so ek basies gaan om te gryp 'n parameter wat gaan gestuur word deur my aan die routing program, en as jy hier kan sien, hierdie lyn reg hier, kan jy sien dat Dit beteken basies jy kontroleerder, en jy het 'n /, en jy het aksie, en jy het 'n ander /, en wat gaan parameters te wees, en omdat ons hierdie naam ID binne hoek tussen hakies, wat beteken dat ons hierdie parameter ID is die noem. Later in my kontroleerder kode as ek wil 'n hou van wat parameter aan te gryp, Ek kan die kode wat ek geskryf het gebruik, vind die parameter genoem ID. Dit is wat ek gedoen het hier, en ek gaan om terug te keer en sê: "Jy het gesê" dit. En so nou as ek gaan na ons webwerf, Ek gaan na cs50-kohana/welcome/echo/Helloooo-- O ja, dit is reg. Daar is 1 stap ek uitgelaat. Dit is deel van die lewe kodering idee. Hier is 1 ding. Kom ons kyk. So normaalweg by verstek met 'n groot deel van hierdie web programme jy het hierdie jeug ding in jou URL in te sluit, omdat die idee jeug is 'n soort van die inskrywing punt van u aansoek, maar natuurlik, Dit is soort van irriterende te hê. Jy wil nie hê jeug verskyn in jou URL, en pretty much elke web raamwerk uit die boks het hierdie jeug probleem, en sodat jy het 'n paar maatreëls in staat wees om dit te verwyder te neem. En so in hierdie geval, wat ons gaan doen, is ons gaan 'n lêer genaamd. htaccess te gebruik, en dit is iets wat spesifiek op die Apache webbediener, en dit kan dinge soos herskryf URL's doen en lei URL's en so aan en so voort, en Kohana is mooi genoeg om 'n sjabloon. htaccess lêer wat ons kan gebruik om voorsiening te maak. Soos jy kan sien, is daar 'n lêer daar genoem example.htaccess, en ons gaan om dit te kopieer. htaccess. Ek gaan om dit te maak en te wysig, en basies is dit nie 'n klomp van verskillende dinge. Die sleutel lyn wil jy dalk om te kyk na is reg hier. Die idee is dat hierdie stel 'n reël wat sê, "Goed, alles wat jy tik in, plaas jeug dat." Jy kan sien dat. Die. * Staan vir niks, ooreenstem met enigiets, En dan is die tweede deel is index.php / $ 0, en $ 0 verwys na alles wat was voorheen ooreenstem. Is wat sin maak? Maar die regtig belangrike ding wat ek wil verander, is dit verander herskryf basis, wat is die URL basis. Dit veronderstel soort van waar jy werk uit. Ek gaan CS50 Kohana te voeg by dat, en dat die pad nou as ek verwyder die jeug, dit moet werk, en ek gaan 'n paar nommers te voeg om te wys dat dit wel werk. Klink goed. Enige vrae so ver? [Studente] Hoe het dit weet dat die 123 te maak? Is dit 'n argument? Presies. Jy kan dink dat dit net soos 'n argument. Maar die vreemde ding is, is dat die manier waarop Kohana doen dit is hulle dit nie doen nie presies soos 'n argument. Jy het dit aan te gryp soos hierdie. Jy het die versoek voorwerp aan te gryp en te vra vir die parameter wat is die naam van ID, en die naam ID kom van die bootstrap lêer dat ek het vroeër, en die naam ID was in daardie hoek tussen hakies, en dit is hoe jy gryp die parameters. Awesome. Enige ander vrae? Soos ek gesê het, leiers, hulle hanteer aansoek logika, so dit is 1 geval waar jy kan sien that's - dit is baie basies, maar dit is nog steeds aansoek logika, die idee van die gryp van die parameter en die skep van 'n nuwe string wat sê: "Jy het gesê blah," en dan spoeg dit terug na jou. En in die algemeen wat jy doen is jy maak verskillende beheerders. Jy skep aparte leiers vir verskillende dele van jou webwerf. Vandag gaan ons 'n baie eenvoudige webwerf te maak, en dit gaan 'n baie basiese blog te wees. Ons gaan 'n nuwe kontroleerder te maak net vir die poste in 'n blog. Maar dan as ek was ook kommentaar lewer op die blog post, dan sou ek waarskynlik wil 'n nuwe kontroleerder vir diegene om kommentaar te lewer. As ek wou die gebruikers by te voeg, sou ek waarskynlik voeg 'n nuwe kontroleerder vir die gebruikers, en in die algemeen, die idee is dat wanneer jy 'n nuwe model, 'n nuwe data voorwerp wat jy met, jy het 'n enkele kontroleerder vir die data voorwerp. Vandag is ons net gaan om te werk met 1 data voorwerp, en wat gaan om poste te wees, En jy kan ook dink aan data voorwerpe as wat ooreenstem met tafels. Die algemeen elke tafel ooreenstem met 1 tipe data voorwerp, So het die post tafel sal moet 1 post model, wat sal 1 post kontroleerder wat ooreenstem met die, en dieselfde vir kommentaar, dieselfde vir gebruikers, en so aan en so voort. En dit is 'n algemene reël. Daar gaan wees spesiale gevalle waar jy mag verskil van dié, maar 90% van die tyd dit is wat jy gaan doen, en ek sal jou wys dit is wat ons gaan doen vandag. 1 meer konsep voor ons duik weer terug in die kode, hierdie idee van voorwerp relational mapping. Julle het reeds gedoen om 'n web-ontwikkeling pset, en jy het gesien dat jy 'n SQL navraag, en wat is dit terug na u rye. Jy kry hierdie rye, en jy indeks hulle deur sommige naam, die naam van die kolom en die tafel en dit is hoe jy werk met dit, en dit kan 'n bietjie lomp is. Maar verder, as jy 'verhoudings in jou databasis, soos byvoorbeeld as ek kommentaar en poste, dan miskien Ek wil die ouer post van 'n kommentaar te gryp. As ek net rye in SQL, dan is al wat ek kan kry is die ID van die ouer post en nie die werklike post self. Maar wanneer ons kodering, wat ons eintlik wil hê, is om werklik te gryp  die ouer post self soms. Wat voorwerp relational mapping doen is dit neem om die resultate van die soektog na die databasis en sit dit in voorwerpe vir jou, wat is baie lekkerder om te werk met as gewone skikkings en rye. Byvoorbeeld, nou dat ek 'n opmerking miskien, en ek wil sy moedermaatskappy post aan te gryp, en ek kommentaar lewer nie miskien pyl post, dan sal dit eintlik vir my die post voorwerp ooreenstem met die werklike ouer post, nie net 'n paar ID, wat ek andersins sou hê om te gebruik en 'n ander SQL navraag om die post te gryp, wat is omslagtig en onnodig. En verder, deur die kartering van al hierdie data rye in voorwerpe, jy kan ook heg meer funksies voorwerpe, so byvoorbeeld, ek het gepraat oor hoe klasse is in wese groeperings van funksies. Jy kan dink dat dit soos dit. Byvoorbeeld, miskien het ek hierdie post voorwerp, en miskien Ek wil graag 'n soort funksie aan om dit te hê wat basies sê vir my is dit onlangs gepos word? Was dit gepos het in die afgelope week, waar of vals? En dit is 'n funksie wat ek kan heg op daardie voorwerp, en dit is werklik gerieflik om dit te hê in die dieselfde plek, en daar is 'n magdom van verskillende funksies wat jy kan skep vir hierdie voorwerpe, en dit is lekker om in staat wees om dit te heg aan 'n klas, 'n voorwerp, terwyl as jy net 'rye wat van jou databasis, dan kan jy nie regtig 'n funksie by daardie. Dit is letterlik net data. Enige vrae oor wat op alle? Orms is baie algemeen web ontwikkeling, en daar is 'n baie verskillende tipes van Orms, en Kohana het sy eie ORM. Dit is baie basies, maar jy sal 'n voorsmakie van hoe dit lyk kry. Kom ons skep 'n model vir ons blog boodskappe, en die eerste ding wat ons natuurlik moet doen is om 'n werklike tafel te skep binne ons databasis eintlik ons ​​data stoor vir diegene poste. Die eerste ding wat ek gaan doen is om te gaan na phpMyAdmin. Het jy ouens gebruik phpMyAdmin voor? Goed, awesome, so julle reeds weet wat dit is, en ek gaan 'n nuwe tabel genaamd Kohana Posts te skep, en dit gaan regtig eenvoudig. Ek sal terug om aan te meld Al wat ons gaan vandag om te doen, is om 'n skrywer en 'n liggaam, hou dit net eenvoudig nie. Ek gaan daardie tafel te skep, En nou het ons net om 'n tafel wat ons poste met 2 velde vir ons outeur en ons liggaam. Die ander ding wat ek nou gaan doen, is om instel my web aansoek so dit weet hoe om met die databasis, en dit, weer, is iets wat jy hoef te doen met al die web programme. Jy moet dit vertel die gebruiker naam en wagwoord en die naam van die databasis en so aan en so voort om uit te vind hoe om werklik te sluit by jou databasis. In Kohana, ons het iets genoem van 'n databasis module, en in die opset gids het ons hierdie gids genoem databasis, en soos jy kan sien, is daar 'n klomp van die instellings wat jy het om hier te stel om dit te sê wat die gebruiker naam en wagwoord vir die databasis, so ek kan eintlik verbind om dit te. En omdat ek nie wil hê dat julle ouens om werklik te weet die gebruiker naam en wagwoord van my databasis, Ek het 'n lêer waar ek reeds gestel dit alles, en ek gaan om te kopieer en plak dit oor. Awesome. Goed. Ek dink dit is al wat die opset wat ek nodig het om te doen, maar laat ons sien. Ons sal aanhou werk in dit, en as daar iets ineenstortings, dan sal ons dit regmaak. Nou wat ek gaan doen, is ek gaan 'n nuwe kontroleerder te skep. Of eintlik, jammer. Ek het eers 'n nuwe model te skep. Ek sal 'n nuwe model genoem Post.php skep, en wat ons gaan doen, is ons gaan om dit te noem klas Model_Post. Kry 'n accentuering op, en so wanneer ek sê, "strek ORM," dit is basies 'n paar meer voorwerp-georiënteerde programmering, wat ongelukkig julle nie in CS50 geleer nie, maar dit is redelik maklik om te haal. Dit gee my al die ekstra funksies wat kom in hierdie ORM pakket, en so het ek 'n klomp van die ekstra funksies en noem maar vir gratis, wat jy 'n bietjie van sien in 'n tweede. Op die oomblik is eintlik al wat ek nodig het om te doen is om 'hierdie klas. Ek hoef nie eens enige funksie of iets te maak, maar Ek het 'n klas wat verteenwoordig die tafel, en omdat ek verleng ORM klas, Ek kry 'n klomp van die dinge wat vir gratis, so vir nou is jy hoef niks meer op te stel. En nou wat ek gaan doen, is ek gaan 'n nuwe kontroleerder te skep, wat ek gaan noem blog.php, en ek gaan om te kopieer oor die Welkom kontroleerder so ek het nie 'n paar dinge te tik, en nou het ek dit te verander. Nou wat ek gaan doen om te toets om seker te maak alles is uit te werk, Ek gaan die eerste pos van my databasis te gryp en druk die liggaam van die boodskap op die skerm. Om dit te doen dat dit wat ek gaan om eerste te doen is ek gaan die poste te red 'n veranderlike so wat ons gaan doen, is om - in Kohana wat jy doen, is om die post voorwerp aan te gryp dit is soort van lastige, maar jy het hierdie ding genaamd ORM :: fabriek te doen, en dan moet jy slaag in die naam van die model wat jy wil, en dit gee die ORM voorwerp wat verteenwoordig die model. En dan, soos ek gesê het, toe ons die uitbreiding van die ORM voorwerp, Ons kry al hierdie metodes vir gratis, so byvoorbeeld, kry ons hierdie nuwe funksie genoem "vind nie," wat terugkeer outomaties elke enkele pos in die databasis, wat is redelik gerieflik. En nou in die liggaam Ek gaan om terug te keer die eerste post en terugkeer om sy liggaam. En natuurlik, ek het 'n pos te skep, so laat ons voeg 'n nuwe pos. Ek sal sê, "Brandon, my heel eerste post." Awesome. En nou is ons gaan om te gaan na blogs en as alles goed werk - O, dit is 'n ander dom lêer toestemming ding weer. Hou op 1 sekonde. Dit is soort van absurd. Daar gaan ons. Goed. Ek vaste dat toestemming probleem. Dit het probeer om 'n paar lêers en 'n paar log te skep, en die regte, weer, is nie behoorlik opgestel nie, so ek het dit sodat die lêers was skryfbare en uitvoerbare sodat dit kan eintlik teken om dinge. Nou is dit gee my 'n uitsondering gesegde, "Klas ORM nie gevind nie," en dit is omdat ek vergeet het nog 'n stap. Dit is te sleg nie. In die bootstrap gids lêer, daar is hierdie modules hier, wat jy kan kies om te aktiveer of deaktiveer. Dit is 'n klomp van die verskillende funksies wat jy kan kies om te gebruik binne Kohana, wat is 'n soort van lekker. Byvoorbeeld, hulle het 'n verifikasie module wat jy kan gebruik vir gebruikers verifikasie. Hulle het 'n kas module as jy wil om te implementeer 'n soort van caching agterkant van die aansoek werk vinniger en noem maar maak. Ons moet die databasis en die ORM module in staat te stel, want soos ek gesê het, is ons met behulp van die databasis, natuurlik, en ons moet ook die ORM module in staat te stel, want ons wil graag die ekstra funksie, wat is lekker om te hê. Al wat ek hoef te doen is uncomment die 2 lyne, en nou as ek verfris, dit het my 'n ander fout. Dit sê, "Klas Model_Post nie gevind nie." Nou is dit 'n goeie probleem te hê nie. Kom ons kyk. Maak dit publiek. No Hou op. O, liewe. Ek weet nie hoekom dit is nie in staat om wat te vind. Dit is regtig vreemd. Ek het hierdie klas hier. Ek dink ek kan hê om - o. Ek is so stom. Ek het vergeet om 'n PHP tag te voeg. Dis hoekom. Nou het ek ongedaan te maak dat 1 verandering Ek het net gedoen het. Goed. Daar gaan ons. Dit was regtig dom. Ek het nie 'n opening PHP tag. Maar soos jy kan sien, is dit nou behoorlik werk nie, reg? Ons het 1 post. Ons gryp die eerste pos, en nou het ons gedruk om sy liggaam. Groot. Fantasties. Enige vrae so ver? Nee? Enige vrae? Goed, so ons het net geskep om die post-model, baie basiese, en ons gaan 'n paar funksies wat later voeg. Ons kan validasies en filter voeg. Validasies is een van die dinge wat dat raamwerke los vir jou baie, baie goed, en ek dink nie julle ouens het dit te doen vir jou CS50 pset, Maar as jy dit doen web-ontwikkeling vir jou finale projek Jy is geneig om te gaan om te wil 'n soort van bevestiging te doen, As dit nie van leë gebruikers name, Miskien met 'n wagwoord met ten minste 'n sekere lengte, dinge soos dat. En dit is regtig lastig om hierdie dinge te implementeer deur onsself, en pretty much elke enkele web raamwerk doen dit vir jou en kan jy om dit te doen in 'n baie skoon manier. En die model is waar jy in die algemeen spreek die bekragtiging reëls, want dit is die validering of 'n model geldig is of nie. Maar vir nou, ons gaan dit later te sit totdat en nou gaan ons te werk op 'n ander deel, en ons gaan om te probeer en maak 'n nuwe vertoning 'n lys van al die poste. Die stappe wat betrokke is by die maak van 'n nuwe aksie vir lys van al die poste is 'n lys van al die poste aan te gryp en dan lewer die lys van al die poste deur die oog. Reg hier, gelukkig genoeg is nie, het ons reeds al die poste gryp die gebruik van hierdie eerste linie, die vind al funksie, en nou is dit wat ons gaan doen, is om so ver Ek het direk die opstel van die liggaam van die reaksie deur verby die tou, maar nou wil ek 'n oog te gebruik, en die verskil tussen 'n oog en net om dit te doen word met die oog kan ek 'n mooi, groot HTML sjabloon het, en wat ek kan doen is om te slaag dit sekere veranderlikes en dan het die oog outomaties die sjabloon vul die gebruik van dié veranderlikes. Wat sal ek doen, is ek sal 'n nuwe siening te skep, en ek sal noem die oog iets soos "blog / indeks," en ek gaan basies bind dit - O, wat ek skryf? My brein is iewers anders. Ek gaan die poste veranderlike aan die oog te bind, sodat manier om die oog het toegang tot hierdie post veranderlike. En so ek moet nou hierdie siening te skep, So hier het ons hierdie gids "uitsig," genoem en die eerste, ek gaan 'n nuwe gids onder die sogenaamde te skep "blog". Dit is lekker. Op dié manier kan ons 'n lekker hiërargie vir ons menings. En dan gaan ek nog 'n lêer daar genoem te skep "jeug." Awesome. Eintlik, laat ons hulle albei hier. Maak 'n oog lêer is waarskynlik die eenvoudigste deel van al hierdie dinge, en dit is waarskynlik dat dinge wat jy reeds vertroud is met. Ons gaan iets baie maklik om te doen, begin sê, "My lys van blog boodskappe." Dan kan ons deur te gaan, en ons kan Itereer deur die pale skikking, gryp elke enkele pos en sê iets soos - Miskien voeg 'n lyn en druk dan die skrywer en die liggaam. Dit maak sin so ver? En laat ons sien of dit werk. Niks het gebeur nie. Ek wonder hoekom. O ja, ek gemis het 1 stap. Baie dom van my. Ek het 'n oog, maar ek het nie die oog as die reaksie, sodat jy het 1 ding om te doen. Jy het "om hierdie reaksie liggaam" te doen en dit die oog te wees. Daar gaan ons. Ons het ons opskrif, en dan het ons 'n pos, En net vir die skop, laat ons 'n ander een post sodat ons kan sien 'n lys. En voeg hierdie 2 poste, en nou as ek verfris die bladsy sien ons al hierdie poste hier. Is wat sin maak so ver? Ja, 'n vraag? O, okay. Soos jy kan sien, het ons in staat was om al hierdie kodes te skei in verskillende afdelings, en dan kan jy sien dit is baie duidelik met die oog kode. Hierdie lêer hier dat die siening verteenwoordig, Dit het net omgee oor wat data, data vertoon. Dit word geslaag 'n soort van data, en al wat dit doen is net wys dit vir jou. In alle ander dele van die kode is, sal jy nie hoef te bekommer oor enige van dit, en net so, jou siening kode nie iets te bekommer oor hoe die databasis om toegang te verkry en so aan en so voort, Dit is regtig 'n goeie en maak jou kode om 'n baie meer te onderhou. Soos ek gesê het, sienings, hulle is dinamiese in daardie dit is 1 lêer, maar verskillende menings sal genereer gebaseer op die veranderlikes wat jy eintlik in slaag, en verder, is daar 'n baie verskillende helper funksies wat jy kan gebruik om jou te help om jou kode te skryf vinniger, wat ek julle in net 'n tweede sal wys. Ja. [Studente] So 0 $ is 'n kontroleerder, reg? Die tweede ding. Die vraag is, is $ 0 a beheerder? 0 $ is 'n veranderlike wat ek gemaak hier. Ek het 'n oog eerste. Ek opgedra dit tot 'n veranderlike. Toe het ek het dit in hierdie funksie, stel dit as die liggaam van die reaksie. Is wat sin maak? [Studente] So is die lig :: fabriek, is die oog soos 'n klas of 'n biblioteek [onhoorbaar] fabriek funksie? Die vraag is oor die siening :: fabriek funksie, en basies dit is 'n paar meer objekgeoriënteerde programmering wese. View is die siening klas, en dit het 'n metode met die naam "Factory" en dit is 'n manier om die voorwerp wat is die naam aan te gryp "blog / indeks." En dit is 'n paar meer objekgeoriënteerde programmering dinge dat ek nie gaan om te gaan in hier te veel. Nou natuurlik, ons wil nuwe poste te skep, maar ons wil nie hê om dit te doen deur middel van 'n databasis, so ons gaan 'n nuwe aksie vir die skep van 'n nuwe pos te skep, en daar is 'n baie dinge wat ons moet doen. Die eerste ding wat ons gaan doen - Kom ons pak hierdie dinge een vir een. Die eerste ding wat ons sal doen, is ons het 'n vorm te skep vir die inbring van 'n nuwe pos, maar Ek gaan ook 'n nuwe aksie om eers by te voeg, sodat die toevoeging van 'n nuwe aksie is net so maklik soos die toevoeging van 'n nuwe funksie met jou kontroleerder, en nou gaan ek iets baie basiese te doen nie, gryp net hierdie siening en pos dit, net vertoon dit vir jou. En dan nou gaan ek 'n nuwe siening lêer te skep, en ek gaan om te begin 'n paar dinge te skryf. Wat lekker is Kohana is dat hulle 'n baie verskillende helper funksies vir jou siening kode makliker om te skryf, en 1 van die helper funksies of helper modules rondom die skryf van vorms. Vir die skryf van vorms, ek het nie regtig enige HTML direk skryf myself. Julle het HTML vorms geskryf. Jy weet hoe dit kan wees baie, baie pynlik en omslagtig vorms te skryf. Dit is nie pret, so gelukkig, ons kan skryf basies 'n vorm met behulp van Kohana se vorm helper funksies wat dit vir ons te doen. Ons gaan basies velde vir elke enkele ding wat ons het, So een vir skrywers en een vir die liggaam. Ons gaan 'n etiket te hê, en ons gaan 'n bydrae te hê. En dan uiteindelik, ons gaan 'n voorlegging te hê. En soos jy kan sien, is dit baie skoner te skryf as alles wat slordig HTML, wat is 'n soort van lekker. Toegestaan ​​is, is daar ander web raamwerke wat dit selfs skoner as dit, maar ten minste is dit beter as die skryf van die HTML jouself. Awesome, so dit is wat jy sien. Dit is soort van 'n morsige, so ek gaan 'n lyn breek om daar te voeg te maak wat lyk 'n bietjie mooier. Wel, natuurlik, is dit nog steeds lyk baie, baie sleg, maar ons is net gefokus op die funksie vir nou en nie op die estetiese. Geen tyd om alles te doen. En soos jy kan sien, nou het ons 'n super basiese vorm, wat is 'n soort van lekker. Hierdie kode sou ek sê, is skoner as om 'n HTML te skryf vorm jouself, so dit is lekker. Wat is volgende? Nou moet ons dinge te doen met die aksie. Gewoonlik wanneer jy HTML vorms te skryf, jy het om dit te sê waar dit gaan om die vorm in te dien by. By verstek in die meeste web raamwerke, dit dien om die presiese dieselfde adres, so die ding is, As jy stuur 'n get versoek / blog / 'n nuwe, dit moet vertoon jy die vorm, Maar as jy stuur 'n versoek aan post / blog / nuwe met die data, dit moet eintlik probeer om daardie pos te red en iets te doen met dit. Wat ons gaan doen, is om basies al wat ons moet doen om te kyk of dit is 'n post versoek of 'n get versoek is om te kyk wat is die post veranderlikes wat jy kan stel. En as die post veranderlike stel, dan gaan ons om te probeer en die skep van 'n nuwe pos. Weereens, ons het net dit doen, en dit skep 'n nuwe pos, en ons letterlik gaan stel sy velde soos hierdie, en dan gaan ons om dit te red. En dan gaan ek te lei die indeks bladsy, sodat hulle kan die lys van poste weer sien. Kom ons probeer dit. Ek sal sê, "Brandon," en dan stuur die post, en as alles goed gaan, soos jy kan sien, het dit my getrek het na die indeks bladsy, en as ek gaan na die onderkant, ons het 'n nuwe plaas post. Yay! Ja, die vraag. [Studente] Wat gebeur as jy presies dieselfde ding aangegaan het jy voor geloop? Is dit nagaan om seker te maak jy het nie gedupliseer dieselfde voorlegging? Wees verstek, nee, want by verstek - Jammer, die vraag is of jy in die presiese dieselfde data in die vorm en indien nie, sal dit jou toelaat om 'n dubbele voorwerp te voeg, 'n dubbele inskrywing, wese? Op die oomblik, ja, dit sal toelaat dat jy om dit te doen, want in databasisse dit is volkome geldig heeltemal dubbele rye te hê, Maar as dit is 'n bekommernis, dan kan jy validasies voeg, byvoorbeeld, om seker te maak dat as dit is presies dieselfde as iets wat reeds bestaan, dan sê dat dit 'n ongeldig voorwerp, en dan kan jy selfs jou fout boodskap spesifiseer en sê, "Ongeldige omdat dit reeds bestaan" of iets soos dit. Maar in hierdie geval, kan ek net 'iets dubbele. Nou laat ons probeer en voeg 'n paar validasies. Die probleem met hierdie is nou reg dat Ek kon letterlik lê 'n heeltemal leeg post. Ek kan hierdie knoppie nou kliek, en daar gaan ons. Jy kan regtig nie sien nie, maar dit ekstra lyn hier dui daarop dat ek letterlik 'n nuwe pos. Dit het net 'n leë skrywer en 'n leë liggaam, en ons wil nie toelaat dat mense om dit te doen. Dit is waar bevestiging kom in Ek kan gaan na my model voorwerp, en nou kan ek 'n nuwe funksie wat bepaal voeg wat validasiereëls ek na hierdie model moet voeg om seker te maak dat dit geldig te maak of te spesifiseer wat beteken dit 'n geldige post te wees? En ek wil om te sê dit is net 'n geldige post indien beide die skrywer en liggaam is nie leeg, en dit is hoe jy dit doen in Kohana. Jy 'n nuwe funksie genoem "Reëls" en dan is jy basies terug 'n assosiatiewe skikking verduidelik dat die bekragtiging reëls vir hierdie doel. Ons gaan die skikking om terug te keer, en dan wat ons gaan doen, is om sê "skrywer" Dit gaan 'n skikking, wat gaan na 'n ander skikking met die naam "nie leeg is." En dan gaan ek om te sê "liggaam." Goed, en die sintaksis vir hierdie en struktuur vir hierdie dalk 'n bietjie lomp is en 'n bietjie ingewikkeld lyk. As jy die dokumentasie te lees, is dit redelik maklik om uit te vind, Maar in wese is dit wat jy hoef te doen om te bepaal sommige validering reëls, en daar is 'n baie verskillende reëls dat Kohana julle sal gee vir gratis, soos jy reëls kan byvoeg om te sê dit moet ten minste hierdie lengte wees. Miskien het dit te wees numeriese. Miskien het dit alfa numeriese wees. Miskien het dit te wees by die meeste van hierdie lengte, so aan en so voort. Daar is 'n baie verskillende reëls wat Kohana bied vir jou, en jy kan gaan op hul webwerf, kyk na die dokumentasie, en jy kan sien al die verskillende dinge wat jy kan doen. Maar dit is al wat ek het om te doen, En nou, laat ons kyk wat gebeur As ek 'n leë pos. Wat gaan gebeur? O, nee, ek kry 'n fout. Ek kry 'n bevestiging uitsondering nie. Wel, dit is goed. Dit het my vertel dat my model is ongeldig, maar ek wil nie 'n uitsondering te vertoon om my gebruikers wanneer hulle probeer om iets ongeldig te dien, reg? Ek wil aan hulle te gee 'n soort van vriendeliker fout boodskap wanneer iets verkeerd gaan. Wat ons gaan doen, is ons gaan draai alles in 'n drie vangs lus. Eintlik, dink ek dit is ook iets wat jy nog nie geleer het nie in CS50, want C, die programmeertaal C, het nie uitsonderings nie, maar byna elke enkele ander taal het uitsonderings, so baie, baie kortliks, 'n uitsondering is iets wat 'n stukkie van die kode kan gooi 'n uitsondering wanneer iets verkeerd gaan, maar dan miskien 'n ander stuk van die kode hoër kan daardie uitsondering vang en iets te doen met dit. Byvoorbeeld, in hierdie geval, die stuk kode wat probeer om 'n model te red, dit bekragtig die model, en as dit sê: "Goed, hierdie model is ongeldig," dit gaan 'n uitsondering te gooi, en dit is 'n soort van gelykstaande aan in C kan jy terug 'n -1 of iets soos dit. En dan vir my, om hierdie funksie, my kode op 'n hoër vlak, kan ek probeer vang dat uitsondering en basies sê, "Goed, as ek vang die uitsondering, wat gaan ek doen?" Of ek kon kies nie dat uitsondering te vang en laat iemand hoër op vang die uitsondering, of as niemand dit vang, dan is die hele program omval en sê: "Iets het verkeerd gegaan, en ek kon dit nie hanteer nie." Maar wat ons doen, is om 'n stukkie van die kode draai in 'n drie blok, en dan moet jy ook iets genaamd 'n vangs blok voeg, wat is die soort kode wat sal probeer vang uitsonderings wat mag voorkom. En so as ek vang hierdie spesifieke uitsondering of ongeldigmaking uitsondering, dan wat ek gaan doen, is om Ek gaan die foute te stel - ek dink dit is hoe ek dit doen - en ek gaan die foute te stel om 'n voorwerp. En dan wat ek gaan doen, is as dit treffers die uitsondering, dit gaan nie om te lei, en as dit nie lei, dit gaan uit die as blog te kom en druk hierdie blog / nuwe, wat wil hê, is wat ek wil doen. As daar 'n fout is, dan wil ek terug te gaan na die vorm en vertoon die foute. Nou wat ek wil doen, is ek wil in daardie foute te slaag die siening. Goed, ek dink ek het die siening reg hier, en basies ek wil daardie foute te wys as hulle bestaan ​​nie. Voordat ek skryf die HTML vir wat, ek regtig vinnig gaan wys jou wat die struktuur van hierdie foute veranderlike lyk, en dit is 'n goeie praktyk in die algemeen. Daar is baie keer jy iets terug van 'n metode, 'n funksie in die web raamwerk en jy weet nie wat die veranderlike lyk, sodat jy nie weet hoe om te werk met dit. Ek gaan 'n druk r metode te gebruik om basies druk dit uit. En soos jy kan sien, is dit vir my sê dit is 'n mede-skikking, en jy het 'n belangrike, skrywer, punte na hierdie string, skrywer moet nie leeg wees, en 'n ander sleutel, liggaam, punte na 'n ander string, liggaam moet nie leeg wees. Ek is soos, okay, cool. Dan kan ek Itereer deur die skikking en die druk van elke enkele boodskap. Dit is basies soos 'n assosiatiewe skikking met 'n klomp van die boodskappe. Wat gaan ek doen, is om "as foute," en ek gaan 'n On-geordende lys te skep, en ek gaan Itereer deur al die foute. En dit, en nou is ek gaan probeer om weer die stuur van hierdie, en laat ons sien wat ons kry. Nou kry ons hierdie mooi lys van foute, en dit is nog redelik lelik, maar dit kan natuurlik geformateer word om te kyk mooi, maar die basiese idee is net in 'n paar reëls van die kode, ons was in staat om ons model te bevestig, maak seker dat sekere gebiede was nie met leë hande, en as iets verkeerd geloop het, dan terug te keer 'n soort van fout boodskap Ek kon dan aan die gebruiker. Jy kan ook jou bevestiging sodat jy kan eintlik 'n fout boodskap wat meer spesifiek met u aansoek of iets soos dit. Al wat algemeen aanpas. Ongelukkig, ons hardloop uit van die tyd, so ek gaan hier om af te sny die live kodering sessie. Daar is 'n klomp van die ander funksies wat ek wil om te demonstreer vir jou In hierdie voorbeeld. Byvoorbeeld, kan jy templates by jou webwerf, so miskien is daar 'n soort van HTML-kode wat jy wil aansoek doen, vir elke enkele bladsy in jou site, en in plaas van die plak wat in elke enkele uitsig lêer wat jy het, wat natuurlik sou 'n slegte praktyk, jy kan basies van hierdie voorleg definieer, en dan in jou kontroleerder sê, "Goed, ek gebruik hierdie sjabloon." "Het al my bestaan ​​hierdie sjabloon gebruik." En die een laaste ding wat ek wil sowel demonstreer aan jou dat ons het nie tyd vir is kruis-site scripting, en basies Ek dink jy ouens het waarskynlik gesien in CS50 - Ek dink David Malan waarskynlik gepraat oor hoe jy gewoonlik kan spuit JavaScript kode in - het jy het gepraat oor hierdie? Miskien? Miskien nie? Maar 'n baie kere wat jy kan kwaadwillige JavaScript-kode spuit in iemand se databasis, en as hulle nie ontsnap nie wat behoorlik, dan wanneer hulle teenwoordig dat die data terug na die gebruiker, dan is dit dalk 'n soort van ewekansige JavaScript-kode wat jy nie wil hê om te gebeur hardloop, en ek gaan om te wys hoe jy dit doen binne Kohana. Dit is eintlik baie, baie maklik. Ek kan dit doen op die oomblik in 2 sekondes letterlik. Al wat jy hoef te doen is basies hierdie dinge draai in hierdie ding HTML entiteite genoem. En dit sal al die karakters outomaties behoorlik ontsnap en maak seker dat jy nie hierdie probleem te kry nie. [Studente] Jy gespel die eerste toets verkeerd. [Brandon Liu] O, oops. Goed, dis al wat ek het met julle te deel vir vandag. Hierdie skyfies gaan gepos word, maar dit is oor die algemeen die enigste hulpbronne moet jy regtig nodig het om te begin met Kohana. Jy kan gaan na die webwerf. Hulle het 'n gebruikers handleiding, en hulle het ook 'n API Explorer. Ons kan verken al die verskillende funksies en helper funksies wat hulle vir jou. Hulle is gewoonlik genoeg inligting op die webwerf wat jy kan gebruik om te begin en gaan met Kohana. Daar is nie so baie tutoriale, dink ek, vir Kohana, buite wat hulle op die webwerf hier, so dit is waarskynlik jou beste bet. Maar as jy wil om te gaan met die web raamwerk en jy wil nie hê om af te haal 'n nuwe taal, en jy wil iets wat relatief liggewig en het 'n maklike leer kurwe, Ek sal beslis daarop dui Kohana. Dit is waarskynlik die beste aanbod vir daardie. Die funny ding is, is as ons met behulp van Ruby on Rails, ons kon herhaal het wat ons nou net gedoen en waarskynlik meer in minder as 3 minute. Geen grap nie, maar leer Ruby on Rails neem baie langer as wat dit sou neem Kohana te leer. Dit is basies jou keuse van wat jy wil om te kies om te leer, Maar as jy wil om op te staan ​​en vinnig hardloop, Kohana is beslis 'n baie goeie keuse. Enige laaste vrae voor ons eindig? Ja. [Studente] Hoe sou ons integreer wat in 'n aangevra soos jy is met behulp van wanneer jy die opdrag? Die vraag is hoe ons sou integreer wat met 'n aangevra? Wat sou ons waarskynlik doen, is ons waarskynlik die volgende insluit 'n nuwe gids waar ons sou stort al ons CSS lêers, en dan sal ons ook 'n nuwe sjabloon. In die sjabloon wat ons wil sluit in dié CSS lêers om seker te maak hulle gekla op elke enkele bladsy maak, en dan wanneer jy eintlik skryf HTML, jy net voeg toepaslike klasse en noem maar op, en byvoorbeeld, wanneer jy met iets soos die vorm helper funksie, kan jy meer parameters daarna voeg te spesifiseer watter klasse jy wil om verskeie dinge geheg word sodat hulle kon dit behoorlik styl, en dit is basies hoe jy te werk sal gaan. Enige ander vrae? Awesome. Dankie vir jou tyd, en dankie vir die komende. Ek is nie van plan om baie anders by te voeg, maar 1 regtig vinnig ding is ons het nie 'n skakel na die vorm. Regtig stom. Kom ons voeg 'n - eintlik in die oog, blog, indeks, laat se werklik vinnig 'n skakel wat na die nuwe bladsy, die bladsy waar ons kan 'n nuwe boodskap plaas. Ons gaan om dit te doen. Wat is lekker is daar hierdie hele groep HTML helper funksies wat doen verskillende dinge vir jou, sodat jy al die entiteite gesien funksioneer hier, maar hulle het ook 'n funksie genoem "anker" wat jy kan tik in blog / nuwe en sê, "Post 'n nuwe blog." En dit sou skep die skakel vir jou, en dit lyk regtig triviale te doen, maar dit is lekker, omdat veronderstel dat jy beweeg jou webwerf vanaf 1 domein na 'n ander. En as jy net geskryf uit die URL's jouself, dan sou jy al die URL's te verander. Of miskien het jy dit verskuif vanaf 1 subgids na 'n ander subgids. Jy sal al die URL's te verander jouself, en dit is geen plesier. Jy kan hierdie anker reg hier gebruik, en jy kan die domein of die subgids voorvoegsel verander in die konfigurasielêer keer, en dan sal dit wat oral van toepassing is, en dit is weer, 'n goeie voorbeeld van jouself herhaal nie, droog jou kode uit. Waar jy self herhaal, probeer en pak in 'n soort van konfigurasielêer of na 'n ander funksie en het dit hanteer wat vir jou. En die heel laaste ding wat ek wou om jou te wys was dink ons ​​is terug by die post, en ek het 'n paar baie lang opstel saamgestel, maar ek het my skrywer in te sluit. Nou wanneer ek kliek op "Stuur Post," Ek het net het alles verloor. Nee! Regtig hartseer. So, hoe hanteer jy dit? Dit is wat ons doen. Wat ons doen, is hier vir hierdie insette en teks area funksies, As ons sluit 'n tweede parameter, dan is die waarde van die tweede parameter gaan wees wat die veld gaan aanvanklik bevolk word. Wat ons kan doen is om in ons blog kontroleerder, Ons kan 'n ander veranderlike bind. Noem dit "waardes" miskien. En slaag in die post skikking, letterlik. Dit beteken dat indien die bekragtiging het misluk, slaag om vir my die post-skikking wat ek uit die laaste versoek ingedien is, en dat die manier wat ek die waardes kan gebruik van my laaste bydrae die velde te herbevolk. Nou kan ek iets soos waardes skrywer doen en waardes liggaam, en dat die pad nou as ek doen 'n paar random stuff en kliek op "Stuur Post," dan bly dit daar. Maar ons gaan om te loop in 'n ander probleem. Dit werk, maar as ek gaan na die bladsy van die heel eerste keer, dit gaan om te crash, en dit is omdat die heel eerste keer ons gaan na die blad, het hierdie post veranderlike nie gedefinieer nie. Dit is nul. Dit bestaan ​​nie. En wat ons wil sê, is as hierdie sleutel bestaan, dan terug die waarde van hierdie verskeidenheid, Maar as die sleutel nie bestaan ​​nie, dan terug te keer 'n leë string. Dit is die funksie wat ons hier wil hê. Ons wil om te kyk of die sleutel bestaan ​​voordat jy probeer die skikking om toegang te verkry, en gelukkig genoeg is, Kohana gee ons ook 'n helper funksie vir daardie. Hulle het die hele reeks van funksies onder die naam ARR, kort vir skikking, en hulle het 1 funksie genoem "kry," en jy kan slaag in die skikking, en jy kan slaag in die naam van die sleutel. Dan basies wat dit sal doen, is om dit te probeer dat die sleutel te kry, Maar as die sleutel nie in die skikking bestaan ​​nie, dan sal dit terugkeer leeg, of ons kan ook 'n standaard spesifiseer, glo ek, wat is lekker. Nou as ons weer dieselfde ding doen, dan nou sien jy dit werk die eerste keer, en weer, as ons tik in 'n paar random stuff en probeer en stuur, dan bly dit daar. En ek dink ek kan ook sien hoe jy 'n sjabloon om werklik vinnig byvoeg. Wat ons kan doen, is die eerste kan ons 'n nuwe vertoning genaamd "template.php" voeg binne die Views gids, en wat ek gaan doen, is ek gaan om uit te druk is iets genaamd "inhoud" wat gaan my om tevrede te wees. En dalk op die heel onderste Ek gaan om by te voeg, sê, kopiereg. [Onhoorbaar student vraag] [Brandon Liu] Miskien is dit 'n super basiese sjabloon ek wil gebruik. Ek wil 'n gids met my kopiereg op elke enkele bladsy te hê, en nou is wat ek gaan doen in my kontroleerder is nou in plaas van sê, "strek Controller" Ek gaan om te sê, "strek Controller_Template," en nou in plaas van sê, "antwoord liggaam is gelyk aan dié siening," Ek gaan om te sê, "hierdie sjabloon inhoud is -" en ek dink - ek het 'n gelyke teken? Ek vergeet nie. Ja, ek het so gedink. En nou, ek stel dat die inhoud veranderlike die oog op die ewenaar. Ek kan dieselfde doen hier. En nou as ek verfris, kan jy nou sien hierdie kopiereg word hier bygevoeg: en maak net 'n paar random post, en dan, weer, moet jy sien dat die kopiereg op die heel onderkant van die bladsy. Grote. Dit is al wat ek wou om te wys julle. [Applous] Enige vrae? [CS50.TV]