[Seminar] [Kohana: Een lichtgewicht PHP Framework] [Brandon Liu] [Harvard University] [Dit is CS50.] [CS50.TV] Hallo iedereen. Mijn naam is Brandon. Ik ben hier een junior aan het college doen de informatica, en vandaag gaan we het hebben over Kohana, dat is een PHP web development framework. Vandaag gaat een live-codering seminar, dus ik ben in principe van plan om 5-10 minuten te besteden uit te leggen wat Kohana is, en dan ga ik letterlijk ga een super eenvoudige blog te bouwen voor u hier letterlijk vanaf nul. We gaan de code downloaden van de Kohana website, en we gaan beginnen met het bouwen van een blog, en hopelijk zal heel leerzaam zijn, omdat je misschien misschien zult zien zal ik een aantal fouten maken, en je ziet me herstellen van hen, of je mijn denkproces te zien als ik bouwen door middel van deze blog, en ondertussen, krijg je ook bekend met het framework zelf. Hopelijk zal het een zeer leerzame oefening. Ten eerste, wat is nu precies een kader? Als u al nemen CS50 tot nu toe, heb je niet echt gewerkt met enige nog kaders, en het ding is dit. Je hebt waarschijnlijk gedaan 1 web development PSET al, en laten we zeggen dat u doorgaat om websites te bouwen en houdt het bouwen van websites. Je zult beginnen met een paar dingen opmerken. Het eerste wat je zal opvallen is dat je waarschijnlijk dezelfde dingen doet over en weer de hele tijd, dingen zoals het schoonmaken gebruiker ingevoerde gegevens, zaken als het organiseren van uw bestanden op een bepaalde manier. Het andere wat je zult waarschijnlijk ook merken is dat je code kan beginnen te zeer, zeer rommelig, en u kunt het laten rommelig en gewoon een zeer harde tijd het onderhoud ervan, of u kunt beginnen om uw code te structureren en het maken van het modulaire op bepaalde manieren om het beter beheersbaar te maken. Dit is waar web frameworks principe binnenkwam Deze mensen die veel websites gebouwd had, zeiden ze, "We hebben geen behoefte om dit opnieuw te doen elke keer dat we een website bouwen." "Waarom gaan we niet gewoon een pakket dat al deze dingen voor je doet elke keer dat u wilt een website te bouwen? " En zodat wanneer u een nieuwe website te maken, je gewoon focussen op wat precies deze bijzondere website over gaat. U hoeft niet aan alle verschillende configuratie herhalen en scheiding van codes en het herschrijven van code dat je vaak moet doen als je het maken van websites. Het idee is dat een kader kunt u een hoger niveau code te schrijven zonder zich zorgen te maken over een lager niveau details. Een lager niveau detail misschien iets als omgaan met schoonmaken gebruikersinvoer data. Dat is iets dat je niet moet echt zorgen te maken over. U moet zich richten op wat uw web toewijzing gaat eigenlijk over. Het elimineert veel standaardtekst code. Het is een architectuur voor uw project. De meest populaire zou Model-View-Controller, zijn die ik ga om over te praten in een tweede. En een heleboel keer deze kaders belichamen een reeks procedures, regels en best practices die u kunt gebruiken zodat wanneer u het web framework vast moet je je code te schrijven op een bepaalde manier, en het is over het algemeen een afgesproken reeks principes door de gemeenschap, dat algemeen wordt aanvaard te zijn een goede manier van het schrijven van code. Het maakt je code beter beheersbaar, meer bruikbaar, zo verder en zo voort. En tot slot, het ding wil ik benadrukken over kaders versus bibliotheken is dit idee over omkering van de controle, en het ding is dit. Het verschil tussen een bibliotheek en een kader is dat met een bibliotheek je bent nog steeds het schrijven van het hoofdprogramma, en je bent een soort van een beroep op de bibliotheek en een beroep op de bibliotheek om iets te doen voor je. Het verschil tussen een bibliotheek en een kader is dat het kader begint met de controle, en het zich beroept op uw code, dus je kunt denken als - dit is waarom het een raamwerk heet - het kader biedt dit frame en de structuur voor uw code, en je in de gaten te vullen, en deze zullen duidelijker worden in een tweede als je me zien beginnen om code te schrijven in het kader van het raamwerk. Je zult zien dat ik het invullen van de hiaten, en het kader is een soort van het controleren van alle bewegende delen, en ik moet de stukjes op de juiste plaats te zetten. Vandaag gaan we het hebben over Kohana, dat is een van de vele PHP frameworks. Er zijn web-frameworks, en er zijn degenen die in vrijwel elke taal, en ik vang Kohana omdat Kohana is aantoonbaar en algemeen erkend als de eenvoudigste PHP framework te halen. Het is de meest lichtgewicht. Er zijn andere degenen die er zijn die komen met veel, veel meer functies, maar ze zijn meestal moeilijker te halen zijn. En tenslotte, Kohana gebruikt de MVC architectuur. Het is licht genoeg dat we letterlijk een project kan bouwen hier vlak voor je ogen, en je kunt vrij veel volgen langs vrij gemakkelijk. Wat is de MVC architectuur? Het staat voor Model-View-Controller, en misschien als je nadenkt over de code die je hebt tot nu toe te schrijven voor een aantal van uw web development psets kunt u in staat om een ​​deel van dit te zien, maar meestal als je beginnen met het schrijven een meer complexe webapplicatie, de scheiding tussen deze 3 segmenten wordt meer en meer duidelijk. Ik legde de MVC hier soort als een stapel, en vaak hoor je mensen praten over stapels in web development, en dit is het idee illustreren dat elke laag, elke component echt probeert alleen communiceren tussen 2 andere componenten. Iemand opent uw website als een client of een browser. Ze omgaan met uw programma via het uitzicht code. Het uitzicht code interageert met de controller. De controller reageert met het model, en het model samenwerkt met de SQL-database. En er is geen hoppen tussen als u uw code correct te schrijven. Wat hebben deze dingen te doen? Het model is in wezen het stukje code dat zich bezighoudt met uw gegevens. Iets dat zich bezighoudt met de database, met de objecten die u op te slaan, of opvraagt ​​die objecten in de database, dat is alles afgehandeld door het model. Misschien heb je objecten in de database. We gaan om een ​​model te maken hebben met posten, dus een post zijn mogelijk een aantal attributen aan. U kunt functies hebben rond het opslaan van deze berichten of het ophalen van berichten of het filteren van de berichten en zo verder en zo voort, en dat is alle code die is behandeld door het model. De controller is een soort van de applicatie logica, en een heleboel verschillende dingen kan gaan in de applicatie logica. Als je praat met een andere API, dat zijn de plekken waar je te maken hebt met de applicatie logica. Als je probeert om te brengen in de gegevens uit meerdere verschillende modellen en te combineren andere manier, die vaak door de controller kunnen worden behandeld. Bijvoorbeeld, op Facebook, als je vriend iemand, dan misschien die handeling vast te stellen dat de relatie kan worden uitgevoerd door de controller. En tenslotte, het uitzicht is de code dat is het genereren van wat je eigenlijk ziet. Vaak denk ik dat in de CS50 psets ze niet echt je aanmoedigen jongens om deze 3 dingen te scheiden. U zult waarschijnlijk waar hebben dit grote, lange file op de top u een aantal SQL-query maken en misschien doen sommige verwerking op de gegevens die u opgehaald uit de database, en dan heb je al je HTML aan de onderkant. En u kunt vinden dat als je meer en meer pagina's maken dat je gaat om wat code herhaling, en ook, het ding is uw dossier krijgt echt grote en lange en log wordt om te beheren. De reden waarom MVC is zo goed beschouwd is voor een aantal redenen. Het eerste wat is een zogenaamde scheiding van bekommernissen dat is het idee dat wanneer je - idealiter 1 stukje code moet 1 ding doen en doen het echt goed, en je moet niet te combineren stukken code die ongelijksoortige dingen doen. Bijvoorbeeld, bekijken code en model code, ze niet echt hoeft te worden gerelateerd. Ze hoeven niet te worden in dezelfde bestanden, dus als je kunt, scheiden ze uit dus het is gemakkelijk te onderhouden. Het andere is het hergebruik van code. Vind je jezelf te schrijven dezelfde SQL-query of het doen van soortgelijke zoekopdrachten die kunnen worden geabstraheerd naar 1 functie, en dat is het idee achter de modellen en controllers, hebben van het in een aparte functie die u opnieuw kunt gebruiken op verschillende plaatsen in uw project. En tot slot, dat is gekoppeld aan het drogen van uw code, of jezelf niet te herhalen, jezelf niet te herhalen. Dit is zeer begrijpelijk in ontwikkeling. Wanneer je kunt, je niet wilt om jezelf te herhalen, want als je jezelf herhalen,  het is veel duurder te handhaven. Wilt u 1 ding te veranderen, moet je het overal te veranderen, en dat leidt tot fouten, en het is verschrikkelijk. Oke. Eventuele vragen tot nu toe over Kohana op alle? Geweldig. Nu gaan we een duik in de live-codering sessie, en hopelijk alles goed gaat. Ik ga deze website in principe bouwen op een van mijn externe servers, en op die manier kunnen jullie ook zie de website en toegang tot de website, en ook het milieu is beter geconfigureerde dan mijn andere machine, omdat het draait Linux in plaats van OS X. We zijn letterlijk gaan beginnen. KohanaFramework.org. Ik ga naar de code van de website downloaden. Ik ga naar de link adres te kopiëren, ga naar mijn server, downloaden, en ik ga het halen. [Student] Wat is het grootste kunt u de tekst te maken? [Brandon Liu] Is dat beter? [Student] Is dat haalbaar? [Brandon Liu] Ja, dat is prima. Ik downloadde een ZIP-bestand en uitgepakt die in een map genaamd Kohana, en we gaan dat CS50-Kohana hernoemen, en laten we naar binnen Geweldig. Hier zie je een aantal verschillende bestanden. De meeste van jullie kunnen negeren - We zijn niet van plan om te gaan door elk bestand dat is hier vanwege onze beperkte tijd, maar over het algemeen wanneer je Kohana, het eerste wat je doet installeren wordt je naar de directory, en je zult in principe doen wat milieu tests en wat al niet om ervoor te zorgen dat uw omgeving goed is ingesteld om Kohana lopen en zorg ervoor dat alles in orde is. U kunt zien dat de meeste dingen voorbij, maar meestal zul je altijd tegenkomen dit 1 probleem waar het klaagt dat sommige directory is niet beschrijfbaar, en dat komt omdat van een aantal toestemmingen. Ik weet niet hoeveel jullie geleerd hebben over bestandsrechten in CS50, maar als je web-ontwikkeling te doen, je gaat lopen in deze kwestie veel. Ik ga het beschrijfbaar maken en ik denk dat ik ook - daar gaan we. Oke, dus nu zie je alles voorbij, en nu zal het u vertellen om de install.php bestand te hernoemen. Ik ga naar de install.php bestand naar installed.php, en nu als ik vernieuwen, het geeft me een fout, en dit is waar het debuggen komt inch Dit is waar je kunt zien wat er daadwerkelijk gaat gebeuren. Het ding is, standaard Kohana ervan uit dat uw project is bij de root directory van uw domein, dus het is verwachten u om bij demo.brandonkliu.com. We hebben om het te vertellen dat het eigenlijk in een submap. Het is in een submap genaamd CS50 Kohana. Het ding is, het is een verkeerde interpretatie van CS50-Kohana als iets anders, dat zal ik u uitleggen in een tweede. Maar ik moet u zeggen dat is iets dat is te verwachten. Wat we gaan doen is gaan we in deze map genaamd bootstrap.php te gaan, dat is de map configuratie waar veel verschillende dingen worden opgezet. Ik open verzonnen. Dan misschien een van de eerste dingen die ik zal doen is de tijdzone. En dan laten we eens kijken. Aha! Hier. Er zijn een heleboel verschillende configuratie zegswijzen bij hier, maar degene die ik ben op zoek naar is dit ding heet basis-URL, en standaard krijg ik deze ingesteld op Kohana, maar ik ga dat veranderen naar CS50-Kohana, en ik denk dat moet herstellen. Ja, prima. Standaard, om te zien dat het werkt, zegt het, "Hello World." Waar kwam dat vandaan? Hoe zijn we tot Hello World? Waar precies is de code die eigenlijk schreef dat? Om dat te begrijpen, zal ik dit concept genaamd routing introduceren. Vrijwel alle web frameworks hebben het concept genaamd routing, dat het stuk van de software die een URL in kaart om een ​​bepaald stuk code binnen uw kader. Bijvoorbeeld, als je een aantal URL en je gaat naar een aantal URL zoals foo.com / blog / alle wat dan het raamwerk gaat doen - of tenminste wat Kohana gaat doen - is dat het gaat om een ​​klasse met de naam controller blog te vinden, en het gaat om de functie met de naam actie draaien allemaal. Ik weet dat ik heb het over klasse en functies, en ik weet dat jullie niet hebben behandeld klassen en functies in nog CS50, maar voor nu, kunt u denken aan lessen als gewoon een groep van functies, een manier groeperen functies samen. Dat is echt alles wat je moet weten. Nu, als we kijken naar onze mappenstructuur, in de map applicatie is er nog een map genaamd klassen, en de andere mappen worden Controller en Model genoemd. Als je kijkt in de map Controller, we zien dat er een bestand genaamd Welcome, en je kunt hier zien is een klasse met de naam Controller Welkom, en er is een functie genaamd Actie Index, en wat het doet is het zet het lichaam van uw reactie op Hello World. Dat is waar de code wordt geschreven. De andere vraag is, nou ja, ik ging niet naar blah, blah, blah, / welcome / index. Hoe ben ik hier terecht gekomen? Nou, dat is gewoon omdat hier aan de onderkant van onze bootstrap bestand waar we onze routes je kunt zien dat ze zetten sommige standaardinstellingen voor u. De standaard controller is welkom. De standaard actie is Index. Dat is waarom wanneer we niets daar ging het automatisch naar de Welcome controller en de index Actie. Alles zinvol tot nu toe? Nu, kunt u meer dan gewoon naar Controller doen en een specifieke actie. U kunt ook doorgeven in de parameters van de controller. Net als een voorbeeld, Ik ga naar een andere actie toe te voegen aan deze regelaar om te laten zien. Laten we deze actie Echo, omdat het gaat om je te vertellen hoe je het ook geven, en zo ben ik eigenlijk van plan om te grijpen een parameter die gaat door mij te worden toegezonden aan de routing programma, en zoals je hier kunt zien, deze lijn hier, kun je dat zien Dit betekent in feite heb je controller, en je hebt een /, en je hebt actie, en je hebt een ander /, en dat gaat worden parameters, en omdat we deze naam ID Onder een hoek haakjes, dat betekent dat we het benoemen van deze parameter ID. Later in mijn controller code als ik wil een greep van die parameter te grijpen, Ik kan de code die ik schreef gebruiken, vinden de parameter met de naam ID. Dat is wat ik hier deed, en ik ga terug en zeggen: 'Je zei "dat. En dus nu als ik naar onze website, Ik ga naar cs50-kohana/welcome/echo/Helloooo-- oh, dat klopt. Er is 1 stap ik weggelaten. Dit is onderdeel van de levende codering idee. Hier is 1 ding. Laten we eens kijken. Dus normaal gesproken standaard met veel van deze web-applicaties je moet deze index.php ding in uw URL, omdat het idee is index.php is een soort van het ingangspunt van uw aanvraag, maar natuurlijk, dat is een soort van vervelend te moeten. U wilt niet te hebben index.php weergegeven in uw URL, en vrijwel elke web framework uit de doos heeft deze index.php probleem, en dus moet je een aantal maatregelen te kunnen verwijderen die rekening. En in dit geval, wat we gaan doen is gaan we een bestand genaamd. htaccess gebruiken, en dit is iets dat specifiek is voor de Apache webserver, en het kan dingen zoals herschrijven URL's doen en om te buigen URL's en zo verder en zo voort, en Kohana is leuk genoeg om een ​​template. htaccess bestand die we kunnen gebruiken bieden. Zoals je kunt zien, is er een bestand daar genaamd example.htaccess, en we gaan om te kopiëren die aan. htaccess. Ik ga deze openen en bewerken, en eigenlijk het doet een heleboel verschillende dingen. De belangrijkste regel die u zou willen kijken is hier. Het idee is dat dit wordt een regel die zegt, 'Oke, wat je ook typt, plaatst u index.php dat. " Je kunt zien dat. Het. * Staat voor iets, iets overeenkomen, en vervolgens het tweede deel is index.php / $ 0, en $ 0 verwijst naar wat eerder werd geëvenaard. Is dat logisch? Maar de echt belangrijke ding dat ik wil veranderen is verandering deze rewrite base, die de URL basis. Het veronderstelt een soort van waar je werkt. Ik ga CS50 Kohana aan toevoegen, en op die manier nu als ik verwijder de index.php, het zou moeten werken, en ik ga wat nummers toe te voegen om te laten zien dat het inderdaad werkte. Klinkt goed. Eventuele vragen tot nu toe? [Student] Hoe is het weten om de 123 te maken? Is dat een argument? Precies. Je kunt denken aan het net als een argument. Maar het rare is echter dat de manier waarop Kohana doet is ze het niet doen precies hetzelfde als een argument. Je moet om het te grijpen als dit. Je moet het verzoek voorwerp te pakken en vraag naar de parameter die is genoemd ID, en die naam ID komt van dat bootstrap bestand die ik eerder liet zien, en de naam ID was in die hoek tussen haakjes, en dat is hoe pak je die parameters. Geweldig. Andere vragen? Zoals ik al zei, controllers, zij omgaan applicatie logica, dus dat is 1 voorbeeld waar je that's kunt zien - het is erg basic, maar het is nog steeds applicatie logica, het idee van het grijpen van de parameter en het creëren van een nieuwe reeks dat zegt: "Je zei blah," en dan spugen die naar u terug. En in het algemeen wat je doet is dat je verschillende controllers te creëren. U maakt aparte regelaars voor de verschillende onderdelen van uw website. Vandaag gaan we naar een zeer eenvoudige website maken, en het gaat om een ​​zeer fundamentele blog. We gaan een nieuwe controller te maken alleen voor de berichten in een blog. Maar dan als ik ook opmerkingen toevoegen aan de blog post, dan zou ik waarschijnlijk willen een nieuwe controller voor deze opmerkingen te maken. Als ik wilde gebruikers toe te voegen, zou ik waarschijnlijk een nieuwe controller voor die gebruikers toe te voegen, en in het algemeen, het idee is dat wanneer je een nieuw model, een nieuw data-object dat je mee bezig bent, u een enkele controller voor die gegevens object. Vandaag gaan we alleen gaan werken met 1 data-object, en dat gaat berichten zijn, en ook kunt u denken aan gegevens objecten als corresponderend met tafels. Over het algemeen elke tafel komt overeen met 1 type data-object, dus de post tabel 1 bericht model hebben, waarvan 1 bericht controller die overeenkomt met die zal hebben, en hetzelfde voor opmerkingen, die voor de gebruikers, enzovoort, enzovoort. En dat is een algemene vuistregel. Er zullen bijzondere gevallen, waar u kan verschillen van die, maar 90% van de tijd, dat is wat je gaat doen, en ik zal je laten zien dat is wat we gaan doen vandaag. 1 meer begrip voordat we een duik terug in de code, dit idee van object relational mapping. Jullie hebben al een web development PSET gedaan, en je hebt gezien dat je een SQL-query te maken, en wat het ook terug naar je rijen. U krijgt deze rijen, en je indexeren door een naam, de naam van de kolom en de tafel, en dat is hoe je ermee werken, en het kan een beetje omslachtig. Maar bovendien, als je relaties binnen de database, zoals bijvoorbeeld als ik commentaar en berichten, dan misschien wil ik de ouder post van een reactie grijpen. Als ik net rijen in SQL, dan is alles wat ik kan krijgen is de ID van de ouder post en niet de werkelijke post zelf. Maar als we het coderen, wat we eigenlijk willen is om daadwerkelijk te grijpen  de ouder zelf plaatsen soms. Welk object relational mapping doet is neemt de resultaten van de database query en zet het in objecten voor u, die veel mooier om mee te werken zijn dan gewoon arrays en rijen. Bijvoorbeeld, nu als ik een reactie misschien, en ik wil haar moedermaatschappij bericht te grijpen, en ik denk misschien commentaar pijl post, dan zal het eigenlijk de post object geef me overeenkomt met de werkelijke ouder post, niet zomaar een ID, die ik anders zou moeten gebruiken en een andere SQL-query op de post te grijpen, hetgeen omslachtig en onnodig. En bovendien, in kaart brengen van al deze gegevens rijen in objecten, kunt u ook meer functies hechten aan objecten, dus bijvoorbeeld, heb ik gesproken over hoe klassen zijn voornamelijk groepen van functies. U kunt hierbij denken aan het als dat. Bijvoorbeeld, misschien heb ik dit bericht object, en misschien zou ik graag een soort van functie die eraan verbonden zijn dat zegt me eigenlijk werd onlangs geplaatst? Werd geplaatst in de laatste week, waar of onwaar? En dat is een functie kan ik dit bevestigen op dat object, en het is echt handig om het op dezelfde plaats hebben, en er zijn een groot aantal verschillende functies die u kunt maken voor deze objecten, en het is echt leuk om te kunnen om het te hechten aan een klasse, een object, terwijl als je net rijen uit de database, dan kun je niet echt geen functionaliteit hechten aan die. Het is letterlijk gewoon data. Heeft u vragen over dat helemaal? ORM zijn zeer vaak web development, en er zijn veel verschillende soorten van ORM, en Kohana heeft zijn eigen ORM. Het is erg basic, maar je zult een voorproefje van hoe het eruit ziet. Laten we een model voor onze blog posts, en het eerste wat we natuurlijk moeten doen is om een ​​echte tabel te maken binnen onze database om daadwerkelijk onze gegevens op te slaan voor die berichten. Het eerste wat ik ga doen is naar phpMyAdmin. Hebben jullie gebruikt phpMyAdmin voor? Oke, geweldig, dus jullie weten al wat dat is, en ik ga een nieuwe tabel met de naam Kohana berichten te maken, en het gaat heel eenvoudig. Ik moet terug te loggen Alles wat we vandaag gaan doen is een auteur en een lichaam, hou het simpel. Ik ga die tabel te maken, en nu hebben we gewoon een tafel die onze berichten met 2 velden voor onze auteur en ons lichaam. Het andere wat ik nu ga doen is configureren mijn webapplicatie zodat het weet hoe u verbinding met de database, en dit, nogmaals, is iets dat je moet doen met al webapplicaties. Je moet het hem vertellen de gebruikersnaam en het wachtwoord en de naam van de database, enzovoort, enzovoort om erachter te komen hoe je nu eigenlijk een verbinding met uw database. In Kohana, we hebben iets dat we van een database module, en in de map configuratie hebben we deze map genaamd Database, en zoals je kunt zien, zijn er een heleboel instellingen moet je hier instelt om het te vertellen wat de gebruikersnaam en het wachtwoord voor de database, dus ik kan eigenlijk verbinden. En omdat ik niet wil dat jullie eigenlijk weten de gebruikersnaam en het wachtwoord van mijn database Ik heb een bestand waar ik het allemaal al op, en ik ga om te kopiëren en te plakken op. Geweldig. Oke. Ik denk dat alle configuratie ik moet doen, maar laten we eens kijken. We zullen blijven werken aan het, en als er iets crasht, dan zullen we het te repareren. Nu, wat ik ga doen is ik ga een nieuwe controller te maken. Of eigenlijk, sorry. Eerst moet ik een nieuw model te creëren. Ik zal een nieuw model genaamd post.php creëren, en wat we gaan doen is gaan we noemen klasse Model_Post. Get Some syntax highlighting op, en dus als ik zeg, "breidt ORM," dat is eigenlijk wat meer object-georiënteerd programmeren, die helaas jullie nog niet in CS50 geleerd, maar het is vrij gemakkelijk op te pikken. Het geeft me al deze extra functionaliteit die wordt geleverd in deze ORM pakket, en zo krijg ik een heleboel extra functies en wat al niet gratis, die je een beetje ziet in een tweede. Op dit moment eigenlijk alles wat ik moet doen is het creëren van deze klasse. Ik weet niet eens behoefte aan een functie of iets maken, maar ik heb een klasse die de tafel vertegenwoordigt gecreëerd, en omdat ik dit ORM klasse verlengd, Ik krijg een heleboel dingen gratis, dus voor nu hoef je niets te meer op te zetten. En nu, wat ik ga doen is ik ga een nieuwe controller te maken, die ik ga blog.php noemen, en ik ga kopiëren over de Welkom controller dus ik heb niet wat dingen opnieuw te typen, en nu moet ik deze hernoemen. Nu, wat ik ga doen om te testen om ervoor te zorgen dat alles is uit te werken, Ik ga naar de eerste post van mijn gegevensbestand grijpen en print het lichaam van de post op het scherm. Om dat te doen wat ik ga eerst doen is ga ik de berichten op te slaan aan een variabele dus wat we gaan doen is - in Kohana wat je doet is om de post voorwerp te pakken het is een beetje omslachtig, maar je moet dit ding heet ORM :: factory doen, en leid u in de naam van het model dat u wilt, en de ORM object dat dat model vertegenwoordigt terugkeert. En dan, zoals ik al zei, als we de ORM object te verlengen, we krijgen al deze methoden voor gratis, dus bijvoorbeeld krijgen we deze nieuwe functie genaamd "vind," die weer automatisch elk bericht in de database, dat is vrij handig. En nu in het lichaam ga ik om terug te keren de eerste post en terug te keren haar lichaam. En natuurlijk moet ik een bericht te plaatsen, dus laten we voegen een nieuwe post. Ik zal zeggen: "Brandon, mijn eerste bericht." Geweldig. En nu gaan we naar blogs en als alles werkt goed - oh, dit is een andere domme bestandstoegang ding weer. Wacht 1 seconde. Het is een beetje absurd. Daar gaan we. Oke. Ik loste dat probleem met de rechten. Hij probeerde een aantal bestanden en wat log te maken, en de toestemmingen, nogmaals, werden niet goed ingesteld, dus ik maakte het zodat deze bestanden waren beschrijfbaar en uitvoerbare dus het kon eigenlijk te loggen om dingen. Nu het geeft me nog een uitzondering gezegde, "klasse ORM niet gevonden," en dat komt omdat ik vergat nog een stap. Dat is jammer. In de bootstrap map, er zijn deze modules hier, die u kunt kiezen om in-of uitschakelen. Dit zijn een aantal verschillende functies die u kunt kiezen om te gebruiken binnen Kohana, dat is een soort van leuk. Zo zij een authentificatiemodule die u kunt gebruiken voor de authenticatie van gebruikers. Ze hebben een caching module als u wilt implementeren een soort van caching back-end om de applicatie te laten werken sneller en wat al niet maken. We moeten de database en de ORM module te activeren, want zoals ik al zei, gebruiken we de database, uiteraard, en we moeten ook de ORM-module te activeren, want we willen graag de extra functionaliteit, die is leuk om te hebben. Alles wat ik moet doen is uncomment die 2 lijnen, en nu als ik het vernieuwen, het gaf me een andere fout. Het zegt, "Class Model_Post niet gevonden." Nu is dit een goed probleem om te hebben. Laten we eens kijken. Openbaar wordt gemaakt. Nee, wacht even. Oh, dear. Ik weet niet waarom het niet kunnen vinden dat. Dat is echt vreemd. Ik heb deze klasse hier. Ik denk dat ik zou kunnen hebben om - oh. Ik ben zo dom. Ik vergat om een ​​PHP-tag toe te voegen. Dat is waarom. Nu moet ik ongedaan te maken dat 1 verandering heb ik net gedaan. Oke. Daar gaan we. Dat was echt dom. Ik heb niet een opening PHP-tag. Maar zoals je kunt zien, nu is het goed werkt, toch? We hebben 1 bericht. We pakten de eerste post, en nu hebben we uitgeprint zijn lichaam. Geweldig. Fantastisch. Eventuele vragen tot nu toe? Nope? Heeft u nog vragen? Oke, dus we zojuist de post model, erg basic, en we gaan enkele functies later toe te voegen. We kunnen validaties en filtering toe te voegen. Validaties zijn een van de dingen die kaders op te lossen voor je echt, echt goed, en ik denk niet dat jullie dit moest voor uw CS50 PSET doen, maar als je web development voor uw uiteindelijke project, je bent waarschijnlijk gaat willen een soort van validatie te doen, zoals het niet hebben van lege gebruikersnamen, misschien met een wachtwoord met ten minste enkele lengte, dat soort dingen. En het is echt lastig om deze dingen uit te voeren door onszelf, en vrijwel elke web framework doet het voor je en stelt u in staat om het te doen in een zeer schone manier. En het model is waar je over het algemeen die validatieregels te uiten, omdat het valideren of een model geldig is of niet. Maar voor nu, gaan we later we deze pas, en nu gaan we werken aan een ander deel, en we gaan proberen een nieuw uitzicht dat alle berichten bevat. De stappen die betrokken zijn bij het maken van een nieuwe actie voor een lijst van alle berichten is om een ​​lijst van alle berichten te grijpen en dan maken de lijst van alle berichten via het oog. Hier, gelukkig genoeg, we reeds alle berichten greep met behulp van deze eerste lijn, de vind-functie, en nu wat we gaan doen, is tot nu toe Ik heb het direct instellen van het lichaam van de respons door het passeren van de string, maar nu wil ik een weergave gebruikt, en het verschil tussen het oog en gewoon dit te doen wordt met het oog kan ik een mooie, grote HTML-template hebben, en wat ik kan doen is het doorgeven van bepaalde variabelen en dan hebben de weergave automatisch de template bevolken met deze variabelen. Wat ik ga doen is zal ik een nieuwe weergave wilt maken, en ik noem het iets als uitzicht "blog / index," en ik ga dit principe te binden - oh, wat ben ik aan het schrijven? Mijn brein is ergens anders. Ik ga aan de palen variabele om de weergave te binden, zodat op die manier het uitzicht heeft toegang tot deze post variabele. En dus nu moet ik deze visie te creëren, dus hier hebben we deze map met de naam "Views" en de eerste, ik ga een nieuwe map onder die genoemd creëren "Blog." Dit is leuk. Zo kunnen we een mooie hiërarchie voor onze standpunten kunnen hebben. En dan ga ik naar een ander bestand daar maken genaamd "index.php." Geweldig. Eigenlijk, laten we ze allebei hier. Maken teneinde bestand waarschijnlijk de eenvoudigste deel van dit alles, en dit zijn waarschijnlijk dingen die je al bekend bent met. We gaan iets heel simpel te doen, beginnen te zeggen: "Mijn lijst van blog posts." Dan kunnen we gaan door, en we kunnen doorlopen de berichten array, grijp elke post en zeg iets als - misschien voeg een lijn en dan print de auteur en het lichaam. Die zin tot nu toe? En laten we eens kijken of het werkt. Er gebeurde niets. Ik vraag me af waarom. Oh, ik miste 1 stap. Heel dom van me. Ik heb een mening, maar ik heb niet ingesteld op het standpunt als de respons, dus je moet doen 1 ding. Je moet "deze reactie body" te doen en zet deze op het uitzicht zijn. Daar gaan we. Wij hebben onze post, en dan hebben we een post, en gewoon voor de lol, laten we voegen een andere functie zodat we een lijst kunnen zien. En steek deze 2 berichten, en nu als ik Vernieuw de pagina, zien we al deze berichten hier. Maakt dat gevoel tot nu toe? Ja, een vraag? Oh, oke. Zoals u kunt zien, hebben we in staat om al deze codes scheiden geweest in verschillende secties, en dan kun je zien dat het meest duidelijk met het uitzicht code. Dit bestand hier dat het uitzicht vertegenwoordigt, het geeft alleen om die gegevens, het weergeven van data. Het wordt doorgegeven een soort van gegevens, en alles wat het doet is gewoon laten zien aan jou. In alle andere delen van uw code, zal je geen zorgen te maken over een van die, en evenzo heeft uw uitzicht code niets te maken over hoe de toegang tot de database en zo verder en zo voort, die is echt goed en maakt uw code een stuk beter beheersbaar. Zoals ik al zei, het uitzicht, ze zijn dynamisch in dat het is 1 bestand, maar het zou verschillende standpunten te genereren op basis van de variabelen die u eigenlijk pas in, en verder zijn er veel verschillende helpfuncties die u kunt gebruiken om u te helpen uw code te schrijven sneller, die ik je laten zien in slechts een seconde. Yeah. [Student] Dus $ 0 is een controller, toch? Dat tweede ding. De vraag is is $ 0 een controller? $ 0 is een variabele ik hier gemaakt. Ik heb een uitzicht als eerste. Ik toegewezen aan enkele variabele. Vervolgens passeerde ik hem in deze functie instellen als het lichaam van de respons. Is dat logisch? [Student] Dus weergave :: fabriek is, is de mening als een klasse of een bibliotheek [onverstaanbaar] fabriek functie? De vraag is over het uitzicht :: factory functie, en eigenlijk is dit wat meer object-georiënteerd programmeren wezen. View is de klas uitzicht, en het heeft een methode genaamd "Factory" en dat is een manier om het object dat is genoemd grijpen "blog / index." En dat is wat meer object-georiënteerd programmeren spullen dat ik ga niet te veel in gaan hier. Nu natuurlijk, willen we nieuwe posten, maar we willen niet te hebben om het te doen door middel van een database, dus we gaan naar een nieuwe actie te maken voor het creëren van een nieuwe post, en er is een heleboel dingen die we moeten doen. Het eerste wat we gaan doen - laten we pakken deze dingen een voor een. Het eerste wat we doen is dat we hebben om een ​​formulier te maken voor het invoegen van een nieuwe post, maar ik ga ook een nieuwe actie voor het eerst toe te voegen, dus het toevoegen van een nieuwe actie is net zo eenvoudig als het toevoegen van een nieuwe functie met de controller, en voor nu ga ik iets heel basic doen, net pak deze visie en post het, alleen de weergave van het voor u. En dan nu ga ik naar een nieuwe weergave wilt maken, en ik ga om te beginnen met het schrijven van een aantal dingen. Wat er leuk is aan Kohana is dat ze een heleboel verschillende helpfuncties voor u om zicht code makkelijker te schrijven, en 1 van die helper functies of helper modules wordt rond het schrijven van formulieren. Voor het schrijven van formulieren, heb ik niet echt aan een HTML direct zelf schrijf. Jullie zijn HTML-formulieren geschreven. Je weet hoe het kan echt, echt pijnlijk en lastig om formulieren te schrijven. Het is niet leuk, zo gelukkig, we kunnen een formulier in principe schrijven met behulp van Kohana's vormen helper functies om het voor ons te doen. We gaan in principe velden voor elk ding dat we hebben, dus een voor auteurs en een van de organen. We gaan een label hebben, en we gaan naar een ingang hebben. En dan eindelijk, we gaan een inzending hebben. En zoals je kunt zien, dit is veel schoner te schrijven dan alles wat rommelige HTML, dat is wel leuk. Toegegeven, er andere web frameworks dat zelfs schoner dan hebben, maar in ieder geval dit is beter dan het schrijven van de HTML-code zelf. Geweldig, dus dit is wat je ziet. Dat is een beetje rommelig, dus ik ga naar een nieuwe regel er toe te voegen te maken dat er een beetje mooier. Nou ja, natuurlijk, het ziet er nog echt, echt slecht, maar we zijn gewoon gefocust de functionaliteit voor nu en niet op de esthetiek. Geen tijd om alles te doen. En zoals je kunt zien, nu hebben we een super basisvorm, dat is wel leuk. Deze code zou ik zeggen is schoner dan te proberen om een ​​HTML schrijven vormen zelf, dus dat is leuk. Wat is het volgende? Nu moeten we dingen doen met de actie. Normaal als je schrijft HTML-formulieren, je moet vertellen waar het gaat om het formulier aan. Standaard is in de meeste web frameworks, hij aan het exact dezelfde URL, dus het ding is, als je een GET-verzoek te sturen naar / blog / nieuw, het moet u het formulier weer te geven, maar als je een bericht verzoek naar / blog / nieuw met de gegevens, het moet eigenlijk proberen om die post te redden en er iets mee doen. Wat we gaan doen is eigenlijk moeten we allemaal doen om te controleren of het een bericht verzoek of een get verzoek is om te controleren wat zijn de post variabelen die u kunt instellen. En als de post variabele wordt ingesteld, dan gaan we proberen en maak een nieuwe post. Nogmaals, we doen dit gewoon, en dat schept een nieuwe post, en we letterlijk gaan zijn gebieden zoals deze set, en dan gaan we het redden. En dan ga ik om te buigen naar de indexpagina, zodat ze onze lijst met berichten weer te zien. Laten we proberen dat. Ik zal zeggen, "Brandon," en dan legt de paal, en als alles goed gaat, zoals je kunt zien, is doorgestuurd me naar de index pagina, en als ik scroll naar de onderkant hebben we een nieuw geplaatste bericht. Yay! Ja, vraag. [Student] Wat als je precies hetzelfde had gesloten u eerder ingevoerd? Is het controleren om ervoor te zorgen dat u niet gedupliceerd dezelfde verklaring? Standaard zijn, nee, want standaard - sorry, de vraag is als je in exact dezelfde gegevens in het formulier in te voeren en betogen dat, zal het u toestaan ​​om een ​​duplicaat object in te voegen, Een dubbele invoer, wezen? Nu, ja, zal het u toestaan ​​om dat te doen, omdat in databases is het volkomen geldig volledig dubbele rijen hebben, maar als dat een probleem is, dan kun je validaties toevoegen, bijvoorbeeld, ervoor zorgen dat als dit exact hetzelfde als iets dat al bestaat, dan zeggen dat het een ongeldig object, en dan kun je zelfs je foutmelding opgeven en zeggen: "Invalid omdat deze al bestaat" of iets dergelijks. Maar in dit geval, ik kon gewoon iets dupliceren. Laten we nu eens proberen en voeg wat validaties. Het probleem met dit is op dit moment dat Ik kon letterlijk een volledig lege post indienen. Ik kan nu op deze knop klikken, en daar gaan we. Je kunt niet echt zien, maar deze extra lijn hier geeft aan dat ik letterlijk een nieuwe post. Het heeft alleen een lege auteur en een lege lichaam, en we willen niet toestaan ​​dat mensen om dat te doen. Dit is waar de validatie komt inch Ik kan naar mijn object model, en nu kan ik een nieuwe functie die aangeeft voegen wat validatie regels die ik moet toevoegen aan dit model om ervoor te zorgen dat het geldig is of om aan te geven wat betekent het om een ​​geldig bericht zijn? En ik wil zeggen dat het alleen een geldig bericht als zowel de auteur en het lichaam niet leeg zijn, en dit is hoe je het doet in Kohana. U maakt een nieuwe functie genaamd "Regels" en dan moet je eigenlijk terug een associatieve array dat de validatie regels voor dit object definieert. We gaan aan de array terug, en dan wat we gaan doen is zeggen: "author", gaat het naar een array, die naar een andere array genaamd "niet leeg". En dan ga ik om te zeggen "lichaam." Oke, en de syntaxis voor deze en de structuur van dit misschien een beetje omslachtig en een beetje ingewikkeld uitzien. Als u de documentatie te lezen, het is vrij eenvoudig om erachter te komen, Maar in wezen is wat je moet doen om dit opgeven sommige validatieregels, en er zijn veel verschillende regels dat Kohana geeft je gratis, zoals je regels kunt toevoegen om te zeggen moet minstens deze lengte. Misschien heeft het numeriek zijn. Misschien heeft het te alfanumerieke zijn. Misschien heeft het te zijn op de meeste deze lengte, enzovoort enzovoort. Er zijn veel verschillende regels die Kohana biedt voor u, en je kunt op hun website, kijk naar de documentatie, en u kunt alle verschillende dingen die je kunt doen zien. Maar dit is alles wat ik moet doen, en nu laten we zien wat er gebeurt als ik submit een lege post. Wat gaat er gebeuren? Oh, nee, krijg ik een foutmelding. Ik krijg een validatie uitzondering. Nou, het is goed. Het vertelde me dat mijn model is ongeldig, maar ik wil niet om een ​​uitzondering te geven naar mijn gebruikers wanneer ze proberen om iets ongeldig leggen, toch? Ik wil dat ze een soort van vriendelijker foutmelding te geven als er iets misgaat. Wat we gaan doen is dat we gaan wikkel alles in een try catch lus. Eigenlijk denk ik dat dit ook iets wat je nog niet geleerd in CS50, omdat C, de programmeertaal C, geen uitzonderingen, maar bijna elke andere taal heeft uitzonderingen, dus echt, echt kort, een uitzondering is iets dat een stukje code kan een uitzondering als er iets misgaat, maar dan misschien een ander stukje code hogerop kan die uitzondering vangen en er iets mee doen. Bijvoorbeeld, in dit geval, het stukje code die probeert om een ​​model op te slaan, valideert het model, en als het zegt: "Oke, dit model is ongeldig," het gaat om een ​​uitzondering te gooien, en dit is een soort van equivalent aan in C u misschien terug een -1 of iets dergelijks. En dan voor mij, deze functie, mijn code op een hoger niveau, kan ik proberen te vangen die uitzondering en eigenlijk zeggen: "Oke, als ik de vangst van de uitzondering, wat ga ik doen?" Of ik zou kunnen kiezen dat niet te uitzondering vangen en laat iemand hogerop vangen de uitzondering, of als niemand vangt hem op, dan is het hele programma crasht en zegt: "Er ging iets mis, en ik kon het niet aan." Maar wat we doen is dat je een stukje code verpakken in een try-blok, en dan heb je ook een zogenaamde catch-blok toe te voegen, dat is het soort code die zullen proberen en uitzonderingen die zich kunnen voordoen op te vangen. En dus als ik de vangst van deze specifieke uitzondering of nietigverklaring uitzondering, dan wat ik ga doen is Ik ga naar de fouten set - Ik denk dat is hoe ik het doe - en ik ga de fouten ingesteld op een object. En wat ik ga doen is als het deze uitzondering raakt, het gaat niet om te buigen, en als het niet te buigen, het gaat uit van de als blog te komen en sloeg deze blog / nieuw, die is wil ik wil doen. Als er een fout is, dan wil ik om terug te gaan naar het formulier en weergeven die fouten. Nu wat ik wil doen is ik wil geschiedde in die fouten aan de weergave. Oke, ik denk dat ik het uitzicht hier, en eigenlijk wil ik die fouten weer te geven als ze bestaan. Voordat ik de HTML-code voor dat, ik ga heel snel laten zien wat de structuur van deze fouten variabele eruit ziet, en dit is een goede praktijk in het algemeen. Vaak krijg je iets terug van een methode, een functie in het web framework, en je weet niet wat de variabele eruit ziet, zodat je niet weet hoe te werken met het. Ik ga een afdruk r methode gebruiken om in principe uit te printen. En zoals je kunt zien, het vertelt me ​​het is een geassocieerde array, en je hebt een sleutel, auteur, punten om deze string, auteur mag niet leeg zijn, en een andere toets, body, punten naar andere string, lichaam mogen niet leeg. Ik heb zoiets van, oke, cool. Dan kan ik doorloopt de array en print elk bericht. Het is in principe net als een associatieve array met een bos van berichten. Wat ik ga doen, is "als fouten," en ik ga een ongeordende lijst te maken, en ik ga doorlopen alle fouten. En dit, en nu ga ik het opnieuw proberen het indienen van dit, en laten we zien wat we krijgen. Nu krijgen we deze mooie lijst met fouten, en dit is nog steeds vrij lelijk, maar dit kan uiteraard worden opgemaakt om er mooi, maar het basisidee is slechts in een paar regels code, we waren in staat om ons model te valideren, ervoor te zorgen dat bepaalde velden niet leeg, en als er iets fout is gegaan, dan terug een soort van foutmelding Ik kon vervolgens presenteren aan de gebruiker. U kunt ook uw validatie aanpassen zodat u kunt eigenlijk een foutmelding dat is meer specifiek voor uw applicatie of iets dergelijks. Het enige dat is over het algemeen aanpasbaar. Helaas, we hebben niet veel tijd, dus ik ga te hebben om hier af te snijden van de live codering sessie. Er zijn een heleboel andere functies die ik wil voor u om aan te tonen in dit voorbeeld. Bijvoorbeeld, kunt u sjablonen toevoegen aan uw site, dus misschien is er een soort van HTML-code die u wilt toepassen om elke pagina van uw site, en in plaats van plakken die in elk oog bestand dat u hebt, wat zou natuurlijk een slechte praktijk, kun je in principe deze templates definiëren, en vervolgens in je controller zeggen: "Oke, ik ben met behulp van deze sjabloon." 'Heb al mijn weergaven gebruiken deze sjabloon. " En een laatste ding wil ik u laten zien ook dat we geen tijd voor is cross-site scripting, en eigenlijk ik denk dat jullie hebben waarschijnlijk gezien in CS50 - Ik denk dat David Malan waarschijnlijk gesproken over hoe u kunt meestal injecteren JavaScript-code in - hebben jullie over gepraat? Misschien? Misschien niet? Maar een heleboel keer kunt u kwaadaardige JavaScript-code te injecteren in de databank van iemand, en als ze niet goed ontsnappen dat, dan wanneer zij aanwezig die gegevens naar de gebruiker, dan kan het een soort van willekeurige JavaScript-code die u niet wilt gebeuren lopen, en ik was van plan om aan te tonen hoe je dat zou doen binnen Kohana. Het is eigenlijk heel, heel gemakkelijk. Ik kon het nu doen in 2 seconden letterlijk. Het enige wat je hoeft te doen is in principe wikkel deze dingen in dit ding heet HTML entiteiten. En dat zal automatisch ontsnappen alle personages goed en zorg ervoor dat je niet dit probleem te krijgen. [Student] U verkeerd gespeld de eerste test. [Brandon Liu] Oh, oeps. Oke, dat is alles wat ik moest delen met u voor vandaag. Deze dia's zullen worden geplaatst, maar deze zijn over het algemeen de enige middelen moet je echt nodig hebt om te beginnen met Kohana. U kunt naar de website. Ze hebben een handleiding, en ze hebben ook een API ontdekkingsreiziger. We kunnen alle verschillende functies en helper functies die zij hebben voor u verkennen. Ze hebben over het algemeen voldoende informatie op de website die u kunt gebruiken om te beginnen en de slag met Kohana. Er zijn niet veel tutorials, denk ik, voor Kohana, buiten wat ze hebben op de website hier, dus dit is waarschijnlijk uw beste weddenschap. Maar als je wilt om te gaan met het web framework en je wilt niet te halen een nieuwe taal, en je wilt iets dat is relatief licht van gewicht en heeft een gemakkelijke leercurve, Ik zou zeker Kohana. Dat is waarschijnlijk het beste aanbod voor. Het grappige ding is echter of we met behulp van Ruby on Rails, we konden hebben herhaald wat we net deden en waarschijnlijk meer dan 3 minuten. Geen grap, maar het leren van Ruby on Rails duurt veel langer dan het zou duren om Kohana leren. Het is eigenlijk uw keuze op wat u wilt kiezen om te leren, maar als je wilt opstaan ​​en snel aan de slag, Kohana is zeker een zeer goede keuze. Elke laatste vragen voordat we eindigen? Ja. [Student] Hoe integreren we dat in een CSS-kader als u gebruikte toen je instrueren? De vraag is hoe zouden integreren we dat met een CSS-kader? Wat zouden we waarschijnlijk doen is dat we zouden waarschijnlijk ook een nieuwe map waar we allemaal onze CSS-bestanden zou dumpen, en dan zouden we ook een nieuwe sjabloon toevoegen. In de sjabloon zouden we omvatten die CSS-bestanden om ervoor te zorgen dat ze verwezen op elke pagina, en dan wanneer je eigenlijk het schrijven van HTML, je voeg gewoon de juiste klassen en wat al niet, en bijvoorbeeld, als je iets als de vorm helper-functie, kunt u meer parameters achteraf toe te voegen aan te geven welke lessen u wilt worden gehecht aan verschillende dingen zodat ze konden het goed stijl, en dat is eigenlijk hoe je zou gaan. Nog meer vragen? Geweldig. Dank u voor uw tijd, en dank u voor uw komst. Ik was niet van plan om heel veel anders toe te voegen, maar 1 echt snel is dat we niet een link aan het formulier. Echt dom. Laten we eerst nog - in feite in de weergave, blog, index, Laten we heel snel een link die gaat naar de nieuwe pagina, de pagina waar we een nieuw bericht kunt invoegen. We gaan dit doen. Wat er leuk is er deze hele groep van HTML helper functies die verschillende dingen doen voor u, zodat u al de entiteiten zag Hier functioneren, maar ze hebben ook een functie genaamd "anker" die u kunt typen in blog / nieuw en zeggen: "Plaats een nieuwe blog." En het zou die verbinding voor u maken, en dit lijkt echt triviaal om te doen, maar dit is leuk, want stel dat je het verplaatsen van uw website vanaf 1 naar het andere domein. En als je jezelf alleen maar schreef de URL's, dan zou je de URL's te veranderen. Of misschien heb je het verplaatst van 1 submap naar een andere submap. Je zou al die URL's zelf te veranderen, en dat is niet leuk. U kunt deze anker hier gebruiken, en je kunt het domein of de submap prefix wijzigen in het configuratiebestand een keer, en dan zal dat overal gelden, en dat is weer, een goed voorbeeld van jezelf niet te herhalen, het drogen van uw code uit. Waar je jezelf herhalen, proberen en extract in een soort van configuratiebestand of naar een andere functie en hebben het te behandelen dat voor u. En het laatste wat ik wilde laten zien was stel dat we terug op deze post, en ik had een aantal echt lang essay samengesteld, maar ik vergat om mijn auteur bevatten. Nu wanneer ik klik op "Verzenden Post," Ik heb gewoon alles kwijt. Nee! Echt triest. Dus hoe ga je om met dat? Dit is wat we doen. Wat wij doen is hier voor deze input en tekstgebied functies, als we onder andere een tweede parameter, dan is de waarde van die tweede parameter gaat worden wat het gebied zal in eerste instantie worden bevolkt met. Wat we kunnen doen is in onze blog controller, we kunnen andere variabele binden. Noem het "waarden" misschien. En pas in de post-array, letterlijk. Dat betekent dat als de validatie mislukt, doorgeven aan mij de post array die ik uit de laatste aanvraag is ingediend, en op die manier kan ik de waarden van mijn laatste inzending de velden bevolken. Nu kan ik zoiets waarden auteur doen en waarden lichaam, en op die manier als ik nu doe wat random stuff en klik op "Verzenden Post," dan blijft het daar. Maar we gaan lopen in een ander probleem. Dat werkt, maar als ik naar de pagina van de eerste keer, het gaat crashen, en dat komt omdat de allereerste keer gaan we naar de pagina, deze post variabele is nog niet gedefinieerd. Het is null. Het bestaat niet. En wat we willen zeggen is als deze sleutel bestaat, dan terug de waarde van deze array, maar als de sleutel niet bestaat, dan in een lege string. Dat is de functionaliteit die we willen hier. We willen om te controleren of de sleutel bestaat voordat u probeert toegang te krijgen tot de array, en gelukkig genoeg, Kohana geeft ons ook een helper functie voor. Ze hebben deze hele reeks van functies onder de naam ARR, kort voor array, en ze hebben 1 functie genaamd "krijgen" en u kunt doorgeven in de array, en u kunt doorgeven in de naam van de toets. Dan eigenlijk wat het zal doen, is het zal proberen om die sleutel te krijgen, maar als die sleutel niet bestaat in de array, dan zal het leeg terug, of we kunnen ook een standaard opgeven, geloof ik, dat is leuk. Als we nu weer hetzelfde doen, dan zie je nu het werkt de eerste keer, en weer, als we typt in sommige random stuff en proberen te dienen, dan blijft het daar. En ik denk dat ik kan u ook zien hoe je een template echt snel oplopen. Wat we eerst kunnen doen is kunnen we een nieuwe visie genaamd "template.php" add in de map bekeken, en wat ik ga doen is ga ik om uit te printen iets genaamd "content" die gaat naar mijn belangrijkste inhoud. En misschien helemaal onderaan ik ga voegen, laten we zeggen, auteursrechten. [Onverstaanbaar student vraag] [Brandon Liu] Misschien is dit een super basic template die ik wil gebruiken. Ik wil een map met mijn auteursrecht op elke pagina hebben, en nu wat ik ga doen in mijn controller is nu in plaats van te zeggen: "breidt Controller" Ik ga zeggen, "breidt Controller_Template," en nu in plaats van te zeggen, "antwoord lichaam is gelijk aan deze visie," Ik ga zeggen, "dit sjabloon inhoud is -" en ik denk - zet ik een gelijk-teken? Ik vergeet. Ja, dacht ik zo. En nu ik die inhoud variabele om het uitzicht te evenaren. Ik kan hier hetzelfde doen. En als ik nu te vernieuwen, kunt u nu zien auteursrecht wordt er toegevoegd, en gewoon wat willekeurige post, en dan, nogmaals, je moet zien dat het auteursrecht is aan de onderkant van de pagina. Grote. Dat is alles wat ik wilde laten zien jongens. [Applaus] Heeft u nog vragen? [CS50.TV]