[Speel van musiek] ERIC OUYANG: Hey, almal. Welkom. Dit is gebou Dynamic Web Apps met Laravel. My naam is Eric Ouyang. Ek is 'n stage studeer sosiale studies met 'n sekondêre in rekenaarwetenskap, en ek woon in Adams Huis hier by Harvard. So Laravel, op sy mees kern, is 'n MVC web app raamwerk. So hou van wat jy ouens het doen met CS50 Finansies, Laravel is 'n raamwerk wat dit moontlik maak jy dinamiese web programme op te bou. So jy kan dink dit in sommige sintuie as 'n uitbreiding van die tipe van dinge jy gedoen het in CS50 Finansies, maar 'n stelsel wat 'n baie meer robuuste, baie meer elegant in sommige sintuie, en bied 'n baie funksionaliteit vir jou redelik kompleks is om te bou web programme. So laat ons gaan deur 'n paar van die belangrikste kenmerke, en dan sal ons duik in 'n voorbeeld van die bou van 'n blog aansoek met Laravel. So een van die eerste dinge wat dit onderskei van MVC tipe werk wat jy gedoen het met CS50 is dit ook 'n ORM enjin. So ORM staan ​​vir voorwerp relational mapping. So dit kan jy op te bou 'n laag van abstraksie tussen die databasis en jou leiers. So anders as in CS50 Finansies waar jy direk maak navrae, die ORM laag kan jy abstrakte dat die weg en skep modelle wat is sterker as jy kan direk met SQL navrae. Nog 'n ding wat regtig nuttig is vererf templates. So jy in CS50 Finansies sal sien, beland jy herskryf 'n baie van die dinge, waar plaas jy kan potensieel hergebruik dinge, jy is nie in staat is. So hier in Laravel, kan jy gebruik wat is bekend as die lem sjabloon enjin 'n meester uitleg te skep. En van daar af, kan jy besit sodat sub-templates kan eintlik sluit elemente in dat groter basis sjabloon. Migrasie. So dit is 'n redelik standaard kenmerke op mees moderne web aansoek raamwerke. So dit laat jou te verteenwoordig databasis skedule veranderings in die kode. So sonder om te sê, phpMyAdmin, jy kan eintlik maak hierdie migrasies waar jy die databasis verteenwoordig skema verander in die kode direk. En dit kan jy veral aan- as jy het verskeie mense werk op dieselfde web application-- spoor van hierdie veranderinge, sê in GitHub, of 'n ander bron. So dit is regtig nuttig en verlaag die behoefte aan, sê, slaag om 'n baie van SQL dumps. En ten slotte, Komponis is iets wat regtig, regtig nuttig wat jou toelaat om ander te gebruik mense se kode ongelooflike dinge te doen. So Laravel se gestruktureer as verskeie komponis pakkette. So sê as jy wou bring in 'n verifikasie pakket of as jy wil om te bring in 'n paar soort generator script of 'n administrateur koppelvlak, kan jy plug and play die komponente met komponis. So laat ons begin. Enige vrae van jou ouens voor ons begin? Geen vrae? Cool. Dus is die eerste stap is om installering komponis. So Composer kan jy beheer van hierdie afhanklikhede, of dit nou die Laravel raamwerk of 'n ander derde party uitbreiding. Die eerste opdrag kan jy Komponis te laai, en die tweede gebod kan jy skuif dit in jou plaaslike bin gids sodat jy kan hardloop Komponis direk deur die terminale. Daarna, gaan voort en skep 'n nuwe Laravel projek. Ons is eintlik gaan gebruik om 'n voorbeeld kode wat ek saam hierdie blog te skep. Maar as jy vanaf nuuts af, sou jy hierdie opdrag gebruik hier, komponis skep-projek, laravel streep laravel, en dan die naam van jou projek. En wat sal insluit al die verspreiding kode vir die begin van 'n nuwe Laravel projek. So vir jou CS50 finale projekte, sal jy waarskynlik wil hê dat die opdrag om te gebruik. Maar ons gaan om te begin met hierdie. So as jy dit gedoen wat, jy gaan te kry 'n redelik uitgebreide aantal lêers in blog50. So laat ons gaan net deur sommige van hierdie komponente. Jy sal sien op die roete gids, daar is 'n app gids. Binne-in die app gids, daar is 'n paar nuttige dopgehou. Van kennis om te begin met is hierdie config gids. So hierdie stel hoe jou web aansoek is gaan, sê, authentic mense of kontant dinge of toegang tot die databasis. En wat is regtig nuttig is dat Laravel laat jou op te rig verskillende ontwikkeling omgewings. So, wat ons hier gedoen is, indien ons gaan onder die plaaslike gids, daar is 'n database.php lêer. En jy sal hier opmerk dat ons opstel van 'n MySQL verband wat toelaat dat individue aan te sluit aan die MySQL bediener wat is direk op die CS50 toestel. En ons is verbind tot 'n databasis dat ek 'n beroep Blog50. So laat ons eintlik voort te gaan en loop die werk weergawe van hierdie, net 'n gevoel van wat die te kry program wat ons bou lyk. So ek het 'n afskrif van hierdie Blog50 voltooi. So Laravel eintlik het in 'n bediener gebou dat jy direk kan hardloop uit die opdrag lyn. So, dit is soortgelyk aan die PSet voor wanneer jy eintlik bou jou eie bediener in C. So het hulle een gebou in so wat jy kan hardloop jou Laravel programme direk uit die opdrag lyn. So as ons dit doen php vakman dien, hierdie sal 'n ontwikkeling bediener begin op poort 8000. So as ons na die plaaslike gasheer 8000, sal jy agterkom dat, hey. Ons het ons blog en hardloop. So Laravel hier genereer die voorblad van ons blog. Baie eenvoudige toepassing. Maar daar is 'n paar n baie interessante eienskappe dat dit 'onder die kap. So die blog aansoek se eenvoudig. As ons wou 'n post te skep, ons kan kliek op die knoppie. Ons kan sê, "Hey, almal. Dit is 'n baie pret seminaar, "byvoorbeeld. En skryf iets neer hier. Teks hier. As ons klik op stuur, sal jy sien dat ons nuwe blog post is bygevoeg tot die voorblad van die blog. As ons terug gaan hier, sal jy agterkom dat daar is 'n paar opmerkings wat reeds op die blog. So as ons scroll down, sal jy sien dat Jonathan Tan sê dat hy baie gefassineer deur hierdie post. So ons gaan na hoe voorwerp relational mapping toelaat jy hierdie verhoudings te doen in 'n redelik naatlose manier as well. Cool. Enige vrae oor funksies van wat ons gaan om te bou? Cool. So laat ons begin met eintlik die skep van die databasis tabelle. So onthou dat in CS50 Finansies, jy saam 'n tafel vir die gebruikers sowel as vir die aandele in jou portefeulje. So as ons vroeër genoem, wat ons gebruik in Laravel is iets wat bekend staan ​​as migrasies. So as ons gaan terug na die verspreiding kode hier, die eerste opdrag wat nuttig dat Laravel bied jou is dit migreer opdrag. So ons kan doen php vakman migreer: maak. So dit laat ons 'n migrasie te skep. En dan sal ons wil 'n migrasie te skep genoem create_posts_table, wat gaan om te wees waar ons gaan wees berging ons blog. En jy sal hier agterkom dat dit loop deur 'n paar kode wat eintlik genereer 'n lêer met 'n tyd stempel op dit. So as ons gaan kyk na databasis, ons sal sien onder Migrasie dat dit het 'n leeg lêer vir ons wat het boiler kode met die naam dat ons gespesifiseer, skep poste tafel. En dit het twee funksies in dit. Up is wat ons wil hê wanneer die hardloop migrasie word toegepas op die databasis. En af is wat ons gaan doen wanneer ons wil 'n migrasie te keer. So hier kom ons begin met die skryf van hierdie migrasie. So daar is 'n nuttige klas in Laravel genoem skedule. So ons gaan hardloop skedule :: skep. En ons gaan om te skep 'n tabel genaamd poste. En hier is ons pas hierdie gebruik van 'n funksie. En binne hier, gaan ons eintlik spesifiseer die inhoud van ons tafel. Ons gaan 'n ID te skep, wat is die motor-verhoog van. Daarbenewens, ons gaan 'n veld te skep wat verteenwoordig die titel van ons blog post. Ons gaan ook 'n veld te skep vir die berging van die teks van ons blog post. En uiteindelik, ons gaan sommige tyd tempel te stoor wanneer ons post is geskep en wanneer dit is opgedateer. En vir af, dit is redelik eenvoudig. Al wat ons wil doen, is druppel die tafel wat ons geskep het. Groot. Enige vrae? So nou as ons gaan voort and-- eintlik, plaaslike gasheer, laat my verwyder wat ons gehad het vroeër. Gaan na Databasisse. Ek gaan om te verwyder wat ons gehad het vroeër. Drop dit en skep 'n nuwe databasis Blog50. So nou wat die magiese deel is hier dat ons kan direk hierdie migrasies van toepassing aan die databasis met die opdrag lyn hulpmiddel. So as ons dit doen php vakman migreer, jy sal sien dat, hey. Dit is geskep om die migrasie tafel, wat ons sal 'n blik op in 'n bietjie, en dit is van toepassing hierdie eerste migrasie. So ons kyk na Blog50, sal jy sien dat dit geskep twee tafels vir ons. Eerste is hierdie migrasies tafel. So as ons blaai hierdie, sal jy agterkom dat hierdie tabel is redelik eenvoudig. Dit is net gesê dat, hey. Ons het aansoek gedoen om hierdie migrasie. Ons gaan terug en kyk na poste. Jy sal sien dat die struktuur is presies wat ons gevra het om dit. Ons het 'n motor-verhoog van ID. Ons het 'n string vir die berging die titel, en 'n teks veld vir die berging van die inhoud. Groot. Cool. Enige vrae oor migrasie werk, hoe kan ons dit toepas? Nee? Cool. So nou gaan ons om voort te gaan en eintlik die skep van die model. So ons wil 'n poste model te skep wat stoor 'n abstraksie van die databasis. So eerder as om MySQL navrae direk, ons gaan te skep. So het ons 'n te skep gids hier genoem modelle. En binnekant hier, gaan ons skep 'n lêer genaamd post.php. Binne hierdie PHP lêer, ons gaan skep 'n klas post wat strek welsprekende. Welsprekende is die naam van die ORM enjin wat Laravel bied. En hier is, kan ons verwag dat jy eintlik nodig het 'n paar kode te skryf. Ons gaan 'n paar te skryf helper funksies later. Maar uit die boks, dit sal reeds besef wat is in die databasis en ons kan bekom, sê die teks van ons blog post of die titel, en die skep van dinge direk met pretty much geen kode hoegenaamd nie. So dit is een van die magiese komponente. En wind keer hierdie klas meer volwaardige, ons sal inligting oor insluit wat dit is wat verband hou met, so die kommentaar. Skep ook 'n funksie sodat ons kan eintlik die URL direk kry van 'n blog post bladsy. Cool. Enige vrae oor wat? No. Cool. So nou eenmaal ons ons model, ons wil 'n kontroleerder dit is om te skep staat om saam met hierdie modelle, en daarna die databasis. So as ons 'n blik op BlogController, sal jy sien dat daar nie veel nou hier. Al wat daar is, is 'n indeks funksie wat verwek die tuisblad, maar sonder om iets daar nog vertoon. Dus is die eerste funksie dat ons gaan om te skep is die een wat ons in staat stel 'n blog post te skep. So gaan ons 'n te verklaar nuwe funksie genoem newPost. En binnekant hier eenvoudig, ons gaan die uitleg van hierdie bladsy op te stel te wees om 'n lewer weergawe, As jy onthou van CS50, van hierdie sjabloon genoem blog.new, wat ons gaan in 'n bietjie te skep. Jy sal hier op die lyn ses agterkom dat ons gespesifiseerde hierdie veranderlike, uitleg. En as ons neem 'n blik by die Views gids, daar is 'n Layouts gids, wat sluit 'n baie basiese HTML-lêer. En van kennis, sal jy sien dat ons hierdie houer hier dat die inhoud oplewer. So binnekant van ons sjabloon wat ons gaan doen is te skep wat gaan wees vervang direk in hierdie uitleg. Daarom het ons gesê dat ons wil lewer 'n sjabloon genoem blog.new. Maar binnekant van Blog, daar is nog nie die nuwe sjabloon. So gaan ons 'n te skep lêer genaamd new.blade.php. Dit vertel Laravel dat hierdie PHP lêer moet word gelewer met die lem sjabloon enjin. So, dit is 'n redelik eenvoudige lêer. Dit gaan die vorm waarop te wees ons eintlik voeg in 'n blog post. So het die magic hier uit die erfenis is dat, hey. Ons wil om te spesifiseer dat die artikel, die inhoud artikel hier, wat afgebaken is deursection enstop. So, wat is in tussen hier gaan vervang word in die meester uitleg. En hier wat ons wil doen, is baie eenvoudig 'n nuwe HTML-lêer. Kom ons voeg net 'n vinnige titel. Voeg 'n blog post. En daarbinne, ons is gaan 'n vorm te skep. Hierdie vorm gaan 'n aksie te hê. En dit gaan om iets te wees dat ons later vervang in, en ons sal sien hoe routing pas in hier. Maar ons is net gaan om te definieer vir nou dat dit gaan om 'n URL met die roete van createPost. En dan is dit gaan metode post te hê. Binne hier, ons gaan twee velde te hê. Div class = "vorm-groep". Ons gebruik die Skoenlus CSS biblioteek genade deur Twitter. So ons gaan twee van hierdie te skep. So die eerste insette is gaan om die titel te wees. So insette name = "titel". Class = "formcontrol". Type = "text". Ek gaan 'n tydelike = "Titel" by te voeg. En dan is die tweede een is gaan 'n teks area te wees. Noem = "inhoud". Class = "formcontrol". En plekhouer = "Skryf hier". Daar gaan ons. Ten slotte, ons gaan voeg 'n vinnige stuur knoppie. Type = "submit" class = "BTN btn-primêre". So dit is al kenmerke van Skoenlus so dat dit gelê kan word in 'n manier wat prooi vir die gebruiker, eerder as blote HTML. Dus het ons die beheerder gedefinieer hier. Ons het gedefinieer 'n baie eenvoudige siening. Maar wat ontbreek is die bindweefsel. So op hierdie punt, Laravel het geen idee hoe ons gaan eintlik toegang tot hierdie kontroleerder. So is dit in 'n bepaalde lêer genaamd routes.php. En nou, ons het een roete. Wat is wanneer ons gaan na die huis pad vir hierdie webwerf dit gaan lewer die indeks kontroleerder. So hier wat ons hoef te doen, is implementeer 'n nuwe roete vir ons 'n pos te skep. So ons gebruik hierdie metode kry, wat bepaal dat wanneer 'n gebruiker probeer om kry dit page-- spesifiek die post streep nuwe page-- wat ons gaan doen word gebruik om die kontroleerder genoem BlogController nuwe pos. Die een wat ons nou net gemaak. En dan gaan ons om dit te alias as newPost. Ons gaan 'n ander te skep funksie in 'n bietjie. Maar wat is hier onder die sleutel "as" is wat ons kan binne vervang ons Blade templates. So vir nou, laat ons eintlik ook sê roete. So ons gaan ook 'n kontroleerder te skep sodat ons hierdie poste kan skep. So as 'n gebruiker poste aan die bladsy post streep nuwe, wat ons gaan doen is gebruik 'n kontroleerder wat ons gaan binnekort skep genoem BlogController by createPost. En ons gaan alias dit met as createPost. Cool. Enige vrae? Cool. So laat loop wat ons tot dusver. So as ons dit doen php vakman dien, ons sal sien baie van die foute. So dit lyk soos ons 'n syntax error op roetes in lyn 27. Ag. Ontbreek 'n kommapunt. So as ons na 8000, jy sal sien nog niks hier. So dit is die standaard tuisblad. Maar as ons gaan om te post streep nuwe, hey. Dit sal die vorm wat ons het net 'wees. Nou, ons het nie die funksie geïmplementeer wanneer ons op die Submit knoppie. So as ons kliek op die Submit knoppie, gaan dit 'n fout om te hardloop. Maar ons gaan kode wat nou, presies wat ons wil wanneer 'n gebruiker te doen dien hierdie vorm. So laat ons dit doen. Gaan terug na die Controllers lêer. Wat ons gaan doen, is om hierdie nuwe funksie implementeer wat ons toelaat om 'n pos te skep. Verklaar nuwe funksie. Openbare funksie createPost. En om hierdie funksie gaan 'n te wees bietjie meer gesofistikeerd as wat ons het tevore. Maar jy sal hier te sien dat ons nie gaan eintlik enige SQL skryf. Die ORM, die ervare ORM, gaan toelaat ons om dit te doen in 'n paar maniere om 'n meer elegante manier. So ons gaan 'n nuwe pos te skep. En hier is ons instantiëren 'n nuwe voorwerp van die model wat ons het net geskep, die post-model. En wat ons gaan doen is ingestel op die titel kenmerk van hierdie gebruik van iets wat ons kry van die bediener. So, dit is soortgelyk aan wat ons het voor in CS50 Finansies waar ons sal doen, met behulp van die Super Global Post soek vir die titel. So Laravel bied 'n paar sanitasie en noem maar op die gebruik van hierdie helper funksie. So ons sou verkies om dit te gebruik in plaas van hierdie baie basiese rou vorm van PHP. En dan wat ons gaan doen is stel die inhoud daarvan te Input kry inhoud. Ons is eintlik gaan om te draai dit in 'n nuttige funksie dat PHP verskaf genoem nl2br, wat draai nuwe lyne, NTD, in BRS, breek, sodat ons kan eintlik het verskillende paragrawe in dit. En uiteindelik wat ons gaan te doen, is om te red van hierdie post. So ons noem die funksie bespaar op hierdie model. Ons gaan die post te red. En uiteindelik wat ons gaan doen word herlei die gebruiker spesifiek die roete wat ons gaan skep kort, alias deur viewPost. En ons gaan in die argumente te slaag id, synde die id van die nuwe pos. Groot. So nou as ons eintlik gaan en hardloop hierdie. Ons gaan 'n nuwe pos te voeg. Kom ons sê dit is seminaar 50. En sê, seker nie. ADSL. Wat ook al. 'N soort van die inhoud. En stuur dit. En ons sal sien dat, hey. roetes nie gedefinieer nie. Maar as ons 'n blik op phpMyAdmin en kyk vir of ons funksie het nie. Kyk na Blog50 poste. Ons sal sien dat, hey. Trouens, ons het net 'dat die blog plaas met die tyd tempel soos gespesifiseer. So nou, laat ons teruggaan en eintlik skep hierdie ander funksie in ons kontroleerder, spesifiek die viewPost kontroleerder. So openbare funksie viewPost. So hier wat ons sal doen, in plaas van 'n leë hakies, ons sal wil hê in die ID van te slaag die boodskap wat ons skep. En van hier wat ons gaan doen is eintlik navraag die databasis vir dit. So as ons nie post, daar is 'n funksie genoem Vind wat ons toelaat om dit te bevraagteken deur ID. Spesifiek, eintlik, ons gaan gebruik 'n alternatiewe weergawe van hierdie sogenaamde Vind of versuim, wat ons in staat stel om op te hou om uit van hierdie funksie, gooi 'n uitsondering as die ID ons verby in bestaan ​​nie. En dan gaan ons om iets te doen soortgelyk aan wat ons gedoen het vroeër waar ons die inhoud van hierdie bladsy te wees die gelewer weergawe van hierdie nuwe siening wat ons gaan skep, blog.view. En ons gaan om te slaag in it-- net soos in die CS50 lewer function-- 'n woordeboek van veranderlikes. Die sleutels van hierdie assosiatiewe skikking geword veranderlikes binne die sjabloon. So ons gaan post post te doen. So slaag indirek die pos wat ons bevraagteken het van die databasis. . Nou wat ons gaan doen is om hierdie siening sodat ons kan eintlik sien die blog poste wat ons gebou het. So gaan ons 'n te skep lêer genaamd view.blade.php. So binnekant van hierdie sjabloon, wat ons gaan doen is saam 'n eenvoudige bladsy kan ons die inhoud te vertoon. Sodat ons artikel doen, dit is voordat inhoud. Stop. En wat ons gaan om hier te doen binne is skryf 'n paar HTML hierdie bladsy te vertoon. So ons gaan om dit te draai met 'n spoggerige nuwe HTML5 element genoem artikel. En hier gaan ons 'n kop waar te hê ons gaan net 'n h1, Dit sluit die post titel. So hier, as ons kyk na hierdie dubbel krullerige brace notasie, hierdie sal hoofsaaklik doen PHP eggo post titel. So dit is 'n nuttige snelskrif dat Laravel bied ons. So ons gaan gebruik hierdie notasie plaas. En hier, gaan ons ook druk die inhoud van dit. En hier gaan ons post-inhoud te doen nie. En af aan die onderkant wat ons is gaan doen, is die skep van 'n voet. En in die voet, gaan ons eerste vertoning wanneer dit was gepos. So dit was gepos op, geskep op. En Laravel gebruik 'n baie mooi datum biblioteek genoem koolstof. Sodat ons kan eintlik iets genoem doen difforHumans, wat jy vroeër gesien het. Wanneer ons gepos word. dit sal sê, soos, vyf sekondes gelede. So, dit is 'n baie mooi funksionaliteit van Laravel. En uiteindelik, ons gaan hierdie footer te sluit. So nou as ons gaan terug na Tuisblad ons gaan niks om te sien hier nog omdat ons het nie gekodeer die tuisblad. Maar as ons gaan slash een te plaas, ons gaan 'n uitsondering te sien. Is daar iemand wat weet hoekom sien ons 'n uitsondering? Wat is ons ontbreek? Enige idees? So, wat het ons doen vroeër vir ons eintlik te bepaal hoe ons by veral beheerders? Spreker 1: Die roete? ERIC OUYANG: Ja. So het ons nog die roete te definieer. So gaan ons terug hier om routes.php. Jy sal dat ons agterkom het nie eintlik gedefinieer hoe ons gaan kry hierdie kontroleerder. So nou gaan ons hierdie roete te definieer. Dit is redelik eenvoudig, soortgelyk aan wat ons gedoen het vroeër. Maar wat gaan ons hier sien, is dat ons gaan 'n plekhouer te hê. So as ons dit doen route.get streep post ID. So ID is nou wat gaan word nie in die beheerder geslaag. Dit gaan die gebruik kontroleerder dat ons net geskep, BlogController by viewPost. En ons gaan alias dit as viewPost. Groot. So nou gaan ons hierdie roete te skep. So nou as ons hier gaan en die bladsy herstel, ons in werklikheid nie het ons nuwe blog post. So dit is wat ons vroeër geskep het. Baie eenvoudige bladsy, maar vertoon die blog post dat ons net geskep word. Cool. En as ons eintlik gaan deur die hele proses van die skep van 'n nuwe blog post, ons sal alles sien aansture behoorlik. As ek sê: "Hi. Ek is Jonathan Tan. " Sê, "Dit is my blog post." En stuur dit, dit sal skep hierdie nuwe blog post met ID 2, wat inkremente van wat ons gehad het voorheen en vertoon dit behoorlik. Awesome. Enige vrae? Ja? Spreker 2: Is Laravel handvatsel sanitization en alles vir jou? ERIC OUYANG: Ja. So wanneer ons vroeër gesien het toe ons het insette kolon kolon kry, dat sanitates enige SQL inspuitings en noem maar op dat ons dalk wil presteer as ons is 'n kwaadwillige gebruiker van die webwerf. So Laravel hanteer 'n baie van daardie agter die skerms. Goeie vraag. So kom ons neem 'n blik op die tuisblad. So as ons eerste terug te gaan na die beheerder vir die tuisblad, jy sal sien dat dit dit nie doen nie veel hier. Jy sal sien dat ons nie verby in hierdie kontroleerder enigiets veral nuttig. Dis net hierdie indeks lêer. So laat slaag in dit iets nuttig. En spesifiek, ons is gaan in poste te slaag. En Laravel ons toelaat pos aan al doen, wat sal ons toelaat om al die poste te kry. Nou as ons gaan terug na index.php, sal jy sien, hey. Nog niks hier. Maar wat ons hier wil doen is eintlik Itereer deur, doen 'n foreach lus oor die poste wat laat ons uit te druk die poste. So foreach poste as pos, wat ons wil doen, is die druk van die inhoud van die blog post. Maar een ding wat jy sal sien, is dat ons eintlik die meeste van daardie kode geskryf reeds in view.blade.php. So, wat gaan ons eintlik doen, is om gebruik om 'n mooi nuttige funksie van Blade en faktor uit hierdie algemene kode. So het ons hier gaan. Ons gaan hierdie inhoud te neem reg hier, en wat ons gaan doen is 'n nuwe gids. Kom ons noem dit net alen. En hier gaan ons 'n post.blade.php te skep. So hier het ons gefaktoriseer uit die pad in wat ons wil hê dat hierdie poste te vertoon. En hier wat ons sal doen in plaas van eintlik gesien dat HTML direk, Ons gaan hierdie richtlijn te gebruik genoem sluit blog.partials.post. En wat ons gaan om hier te doen is verby in die pos van die bladsy. So nou as ons gaan terug hier, ons sal sien dat die funksie is nog steeds dieselfde. Maar nou het ons hierdie ingereken uit kode, hierdie HTML. Sodat ons dit kan gebruik in indeks. So hier, dit is baie eenvoudig. Al wat ons doen is, sluit blog.partials.post en skikking. En iewers te voor, doen ons post post. So nou as ons gaan terug na die tuisblad, sal ons sien dat hey. Ons het 'n lys van al die blog boodskappe wat ons gehad het voordat. Ons wil dalk 'n bietjie "as" voorwaardes en "anders" voorwaardes sodat as ons nie enigiets op die blog, ons wil iets nuttig te vertoon. Soos, hey. Daar is geen inhoud nog nie op die blog. En as jy ouens eintlik kyk na die verspreiding kode op GitHub, jy sal 'n voorbeeld van hoe ons dit doen sien. Cool. Enige vrae? Ja. Spreker 2: Ek dink net 'n fundamentele vraag. Terug by die roete. ERIC OUYANG: Ja. As ons 'n blik op roetes. Spreker 2: Waar kom die uses.blogcontroller skep by post, wat beteken dat die direkte ons? ERIC OUYANG: Ja. Ja. Spreker 2: Of wat is that-- ERIC OUYANG: So, neem 'n blik, sê byvoorbeeld, hierdie roete reg hier. Die eerste deel is die werklike URL dat die gebruiker gaan na. En dit array hier, assosiatiewe skikking, definieer hoe ons wil hê dat die te hê aansoek te tree in reaksie daarop. So gebruik die kontroles, die funksie wat ons wil wanneer 'n te roep gebruiker gaan na hierdie URL. So viewPost hier was 'n funksie wat ons gedefinieer binnekant van BlogController-- Spreker 2: Ek sien. ERIC OUYANG: --so dat ons kan eintlik maak 'n oog, het 'n paar berekeninge, interaksie met die SQL databasis. Spreker 2: OK. ERIC OUYANG: En dan die ander deel, "as" is 'n alias wat ons gebruik. So as ons sien wanneer ons geskep om die vorm, jy dat URL sien :: routecreatePost. So is dit vervang in die werklike URL sodat ons nie hard kodering hierdie in so kan ons dit verander een keer, sê as ons wou verander. In plaas van na slash nuwe, ons wil te doen soos, p streep nuwe net om skoon te maak up ons URLs 'n bietjie. Ons sal dit verander in een plek eerder as oor al die verskillende lêers. Cool. Dit is goed. So nou het ons 'n baie basiese blog platform. Ons wil seker te voeg in 'n knoppie so dat ons eintlik kan skep nuwe poste. So as ons neem 'n blik by die uitleg Meester, ons het 'n artikel genoem Selected Right dat ons het net gedefinieer by die top. So kan ons knoppies by te voeg die top van die kop. So as ons na index.blade.php, eintlik doen is definieer wat gaan binne-in hier. So hierdie Selected Right artikel, wat ons gaan doen is voeg in 'n knoppie om te gaan na die URL gedefinieer deur die roete nuwe pos. Net om dit skoon te maak en maak dit mooi en al Skoenlus, ons gaan maak dit 'n standaard-knoppie. Kom ons maak dit net groot vir die pret. En binne-in, kan ons 'n paar teks sit. Maar wat Skoenlus bied is glyphicons. So kan ons eintlik voeg in daardie mooi potlood wat ons vroeër gesien het. Glyphicon. Glyphicon-potlood. So dit sal toelaat om ons te sit in 'n ikoon in plaas van die teks. Nou as ons nie ophou nie, dit sal hierdie afdeling definieer. En, hey. Ons het 'n mooi knoppie wat ons skakels direk aan die voeg 'n blog post bladsy. So ons het 'n redelik eenvoudige blog. Ons kan dinge toe te voeg. Maar wat ons in die algemeen verwag van blogs is kommentaar. So dit is baie belangrik vir ons te hê, sê, as iemand anders besoek 'n webwerf en regtig hou van die boodskap wat hulle kan betrokke raak in gesprek met ander mense wat die bladsy besoek. So ons gaan om te gaan en die skep van 'n nuwe databasis tafel en 'n nuwe model sodat ons kan assosieer kommentaar met poste. Dus is die eerste stap, net soos voorheen, is dat ons 'n migrasie uit te voer. Dus, net soos voorheen, ons doen php vakman migreer: maak. En ons gaan een te skep genoem create_comments_table. Dit sal 'n lêer te skep wat ons nuwe migrasie. En ons gaan, soos voor, definieer 'n nuwe tabel. So skedule :: 'n tabel genaamd kommentaar. Hierdie funksie hier. En binne hierdie tabel wat ons gaan doen, is die eerste, soos voorheen, toewys 'n ID. Inkremente ID. Ons gaan toelaat om te assosieer hul naam met 'n spesifieke kommentaar. Ons gaan 'n paar inhoud te hê wat gaan saam met hierdie, teks inhoud. En hier wat ons gaan doen, is iets anders. Ons gaan 'n heelgetal te skep Dit is genoem post_id wat gaan om aan te dui watter post 'n bepaalde kommentaar gaan met. Daarbenewens het ons eintlik gaan om stel 'n vreemde sleutel beperking op hierdie. So MySQL sal dwing nie. Ons is nie probeer om te toewys kommentaar aantal 5 te plaas 5000 as ons nie het 5000 poste op dit. So wat ons hier doen, ons doen buitelandse post_id gaan geassosieer word met die ID-veld van die tafel poste. En ons sal eintlik iets te doen anders nuttig, is onDelete. So as ons verwyder sommige plaas van die databasis, dat ons wil hê dat die te wentel verwyder vir kommentaar as well. Want dit is nie baie nuttig vir ons kommentaar op poste te hê wat nie bestaan ​​nie. En uiteindelik, soos voorheen, ons is gaan tyd seëls te stel op hierdie. En soos voorheen, gaan ons die omgekeerde migrasie wees weglating van die kommentaar tafel. So nou as ons gaan terug hier gaan ons hierdie migrasie, vakman migreer om te hardloop. En nou is dit toegepas hierdie migrasie dat ons net gemaak. So as ons 'n blik op phpMyAdmin, ons doen, in werklikheid, nou 'n kommentaar tabel met die struktuur wat ons het net gespesifiseerde. Dus, net soos voor, ons is gaan 'n nuwe model te skep abstrakte die SQL tafel dat ons nou net gemaak het. So laat Voeg 'n nuwe lêer. Ons gaan om dit te noem comment.php. En dit is eintlik gaan redelik wees eenvoudig met 'n effense verandering van wat ons voorheen gehad het. So klas Kommentaar strek Eloquent. En wat ons gaan om hier te doen is definieer 'n funksie wat is die verhouding met ander modelle. So ons gaan 'n post-funksie te hê hier dat die opbrengste van hierdie verhouding. So ons spesifiseer dat dit behoort te plaas, sê dat daar 'n boodskap dat hierdie kommentaar behoort. Dit het eintlik te wees kapitaal P vir die model. En nou net op die ander flip kant, ons het om te sê dat, hey. Poste kommentaar. So wat ons gaan doen, is om openbare funksie kommentaar definieer. En hier is terug dit het baie Kommentaar. So nou mettertyd wanneer ons 'n pos, ons kan kry die kenmerk kommentaar en dit sal dit vul met die inligting uit die databasis. So laat ons eintlik gaan deur en voeg 'n nuwe funksie aan ons siening lêer sodat ons kan beide vertoning en die skep van kommentaar. So ons gaan 'n nuwe artikel te definieer. Laat ons net skei dit met 'n horisontale reël. Artikel id = "kommentaar". Wat ons gaan doen Hier is, soos tevore, Itereer deur al die kommentaar. So eintlik hoe ons dit doen, is, soos ek genoem het, redelik magies. Ons doen post kommentaar. En dan kan ons dit vir elkeen van ons lus oor elk van die kommentaar. En wat ons gaan doen is div class kommentaar, en ons gaan eintlik druk hierdie kommentaar. So toon dat hey, kommentaar name-- die persoon wat gepos hierdie comment-- sê dot dot dot. Ons gaan dit in 'n blok te sit quote, net om te maak dat dit lyk nice. En dan kommentaar lewer inhoud blok aanhaling. En foreach. So nou is dit gaan lus deur al die kommentaar wat geassosieer word met elk van die poste en vertoon elk van die kommentaar. Ek gaan 'n ander artikel af te voeg hier, wat ons toelaat om 'n kommentaar by te voeg. So h3 klas. Sit 'n titel hier. Voeg 'n kommentaar. En ons gaan 'n nuwe vorm te definieer. Dus, net soos voor, ons is gaan vorm om aksie te doen. En hier is die nuwe aksie is ons gaan 'n nuwe kontroleerder te definieer wat ons toelaat om te reageer op plaas versoeke vir die skep van kommentaar. So URL :: roete createComment. Ek gaan om te slaag in die parameter hier. Die ID van die pos wat ons is die skep kommentaar op. En dan is die metode van hierdie vorm gaan pos wees. Nou gaan ons by te voeg in 'n twee velde, vorm groep. Dit gaan 'n inset aan die wees noem "naam" en class = "vorm-beheer", type = "text", en met die plekhouer = "Jou naam." Ons gaan ook te definieer 'n ander vorm veld, wat gaan 'n teks te wees gebied soos ons voorheen gehad het. Net soos voorheen, noem dit inhoud. Class = "vorm-beheer." Plekhouer = "Skryf hier." En net so dat ons kan eintlik stuur dit, dien tipe en klas = "BTN btn-primêre." Maak die vorm. Sluit hierdie aksie. So nou as ons die bladsy herstel, waar ons het, sê, 'n bepaalde pos. Ons het die bediener te herlaai. PHP vakman dien. Herlaai hierdie. Ons het die roete te definieer. Maar vir nou, laat ons net neem hierdie uit sodat ons kan jy eintlik wys wat die bladsy lyk, en dan ons sal eintlik skep dat die roete. So, hey. Ons het hierdie nuwe vorm hier sodat ons kan kommentaar skep. So laat ons eintlik definieer 'n funksie binne die beheerder sodat ons kommentaar kan byvoeg. Kom ons gaan terug. En binne blogcontroller.php, wat ons gaan doen is 'n nuwe funksie genoem skep kommentaar. Openbare funksie createComment. Dit gaan 'n enkele te hê parameter, die ID van die poste dat ons kommentaar op. En soos voorheen, ons is gaan eers die post. So plaas, findOrfail id. Daarna gaan ons 'n nuwe kommentaar te skep. So kommentaar = kommentaar. Kommentaar name = Input :: kry naam. Kommentaar inhoud = dieselfde nuwe lyn in breek van die insette :: kry inhoud. En ten slotte, ons gaan te hê assosieer hierdie kommentaar met die post. So ons gaan gebruik hierdie funksie, kommentaar, wat dit moontlik maak om ons te red hierdie verhouding. So nou hierdie kommentaar sal outomaties die post ID. Ons kan ook dit hand, maar dit is meer maklik om so ver gelees as die funksie gaan. En nadat ons voer hierdie, wat ons wil doen, is herlei die gebruiker na die roete wat deur viewPost met die skikking met die parameter van die post ID. En nou so dat dit eintlik funksies, wat ons nodig het om hierdie roete te definieer. Route :: post. En nou is ons gaan om dit te noem post streep ID slash kommentaar. Array gebruik die nuwe funksie dat ons nou net gemaak het. BlogController. CreateComment as createComment. Groot. So nou hopelik as ons hierdie bladsy te verfris en voeg in 'n kommentaar, sê, David Malan. "Hopelik sal dit werk." Dien. Ons, in werklikheid, het nie 'n kommentaar te lewer op hierdie blog post. Cool. So nou het ons 'n redelik funksionele blog post. Ons is net gaan om te voeg 'n paar tweaks so dat ons het 'n paar meer nuttig inligting oor hierdie poste. So as ons gaan terug na die voorblad, ons het geen sin hoeveel kommentaar op elk van hierdie poste. So, wat ons eintlik gaan te doen, is om in ons model, 'n helper funksie wat toelaat definieer ons die aantal kommentaar te spesifiseer wat saam met 'n spesifieke pos. So ons gaan skep 'n helper funksie. Openbare funksie. GetNumCommentsStr. So 'n string wat spesifiseer die aantal van kommentaar wat saam met dit gaan. En wat ons gaan doen, is om te sê dat num = dit kommentaar tel. So ons gaan om te tel die aantal kommentaar. En as hierdie nommer gelyk 1, ons is net gaan 1 kommentaar om terug te keer. En dan anders, ons wil om terug te keer die aaneenskakeling van NUM en kommentaar, so kry ons die pluralisering korrek is. Maak net hierdie 'n enkele aanhaling. Een kommentaar. En nou kan ons hierdie funksie gebruik direk binnekant van ons siening. So as ons gaan terug na die gedeeltelike poste wat ons geskep het, Nou wil ons eintlik vertoon die aantal kommentaar. So wat ons kan doen is om post, gebruik hierdie funksie dat ons net geskep om vertoon die aantal kommentaar. So as ons nou verfris, dit nie, in werklikheid, vertoon die aantal kommentaar wat saam met dit gaan. As ons wou fancy as jy wees eintlik kyk na die verspreiding kode, ons kan eintlik skakel dit aan die kommentaar. As jy onthou, het ons gedefinieer binne die sien dat dit het artikel ID kommentaar. So as ons wou eintlik om te skakel direk aan die kommentaar afdeling, wat sou ons hier doen, is om 'n href URL van die roete viewPost. Slaag in die skikking ID van post ID. En dan wil ons om te gaan na spesifiek die kommentaar afdeling. Hier laat ons sluit die A tag. So nou as ons verfris hierdie bladsy, ons kliek op hierdie. Ons sal direk na die kommentaar afdeling. As ons 'n langer post, kan jy eintlik sien hierdie weiering af. Maar jy sal sien dat dit nie aan die bokant van die bladsy. Cool. Groot. So dit is 'n redelik eenvoudige voorbeeld van iets eenvoudig wat jy kan doen met Laravel. Maar jy kan hier agterkom dat ons het 'n baie van die dinge wat gedoen met redelik min bedrag van die kode. Laravel ons toelaat om die te doen SQL navrae agter die skerms. Dit doen die sanitasie vir ons agter die skerms. Laat ons hierdie verhoudings te doen baie maklik sonder dat ons nodig enige SQL te doen sluit state kombineer kommentaar met wat die poste. Laat ons dit te doen erfenis van templates sodat ons kan hierdie nes definieer lêers sodat ons nie ons te herhaal, net soos wanneer ons gehad het dat vertoning van die blog dat ons nie hoef te kopieer en plak die kode. En van hier af kan bou toenemend ingewikkelde programme. Jy kan dink as ons wou implementeer log-in, ons kon sê, bring in 'n derde party raamwerk wat ons in staat stel om dit te doen. Daar is 'n klomp van hulle wat regtig, regtig groot dat kan doen soos, wagwoord herstel. En dit sal jy 'n stuur Herstel wagwoord e-pos. Ons kan toestemming implementeer sodat ek kan 'n post skep, maar iemand anders kan dit nie redigeer nie. Ons kan implementeer funksionaliteit poste te verwyder. Maar jy kan hier sien dat ons mooi much al die basiese komponente sommige te bou regtig, regtig, dinamiese en opwindende web apps. So met dit, ek dink ons ​​is goed. Moenie julle enige vrae? Ja? SPREKER 3: Hoe doen jy kry statiese inhoud? ERIC OUYANG: Statiese inhoud. So jy sien voordat dat wanneer ons moes hierdie reg hier, hierdie uitleg inhoud, oog make, ons het hierdie Sonder hierdie verskeidenheid daarna. Blog.index, ons het hierdie as net 'n statiese lêer. So as ons nie slaag nie enigiets saam aan dit, dit sal net maak die HTML direk. Maar as ons slaag in hierdie assosiatiewe verskeidenheid van poste, wat is dinamies getrek uit die databasis, ons kan die bladsy dinamies. Cool. Enige ander vrae? SPREKER 3: Hoe sou jy vergelyk Laravel om dalk 'n paar ander opsies? ERIC OUYANG: Natuurlik. Ja. So Laravel is-- dit is 'n groot question-- een van baie opsies vir die web raamwerke. So Ruby on Rails is een wat gewild is. Ek glo Twitter gebruik om te wees geïmplementeer met Ruby on Rails. Ek dink hulle het sedert aangeskakel. Daar is 'n ander een wat geroep is FuelPHP. So Ruby on Rails gebruik die Ruby taal en implementeer 'n groot deel van die MVC dinge dat ons hier te sien. FuelPHP is 'n ander PHP raamwerk. Django is een van my gunstelinge. Dit is 'n web raamwerk vir Python. So kan jy jou web app in Python skryf. So is daar 'n ton van die opsies. Laravel, dink ek, deur en groot is my gunsteling reg nou vir PHP net omdat van die komponente dat ons gepraat oor vroeër. Dit se Komponis aangeskakel. Dit sluit in 'n baie, baie ekspressiewe ORM stelsel. Ook het 'n awesome template taal wat sommige van die ander net voorsien nie. En migrasies. Migrasies is awesome so goed. Cool? Awesome. Wel, dankie vir kyk na hierdie seminaar, en voorspoed op jou finale projekte.