[MUSIK SPELA] ERIC Ouyang: Hej, alla. Välkommen. Detta är Building Dynamic Web Apps med Laravel. Mitt namn är Eric Ouyang. Jag är en sophomore studerar samhällskunskap med en sekundär i datavetenskap, och jag bor i Adams Hus här på Harvard. Så Laravel, som mest kärna, är en MVC web app ram. Så gillar vad ni har gjort med CS50 Finance, Laravel är ett ramverk som gör det möjligt du kan bygga dynamiska webbprogram. Så du kan tänka på det i några sinnen som en förlängning av den typ av saker du gjort i CS50 Finans, men ett system som är mycket mer robust, mycket mer elegant i vissa avseenden, och ger en hel del funktionalitet för dig att bygga ganska komplicerad webbapplikationer. Så låt oss gå igenom några av de viktigaste funktionerna, och sedan ska vi dyka in i en exempel på att bygga en blogg Ansökan med Laravel. Så en av de första saker som skiljer den från MVC typ av arbete att du har gjort med CS50 är det innehåller en ORM motor. Så ORM står för objektet relationell mappning. Så detta kan du bygga ett lager av abstraktion mellan databasen och dina controllers. Så till skillnad från i CS50 Finance där du direkt göra förfrågningar, ORM lagret kan du abstrakt som bort och skapa modeller som är mer kraftfull än kan du direkt med SQL-frågor. En annan sak som är riktigt användbart är ärftliga mallar. Så du kommer att märka i CS50 Finance, du hamnar omskrivning en massa saker, där placerar du kunde potentiellt återanvända saker, du inte kan. Så här i Laravel, kan du använda det som finns kallas blad mall motor att skapa en mästare layout. Och därifrån kan du ärva så att under mallar kan faktiskt innefatta element inom att större bas mall. Migration. Så detta är en ganska standard på de flesta moderna webbapplikation ramar. Så detta gör att du kan representera databasschemaförändringar kod. Så utan att gå att säga, phpMyAdmin, Du kan faktiskt skapa dessa migreringar där du representerar databasen schema förändringar i koden direkt. Och detta gör att du att-- speciellt om du har flera personer som arbetar på samma web application-- spåra dessa förändringar, säger i GitHub, eller någon annan förvaret. Så det här är verkligen bra och mildrar behovet till, säg, skicka runt en massa SQL soptippar. Och slutligen, är Composer något riktigt, riktigt användbart som låter dig använda andra människors kod för att göra awesome saker. Så Laravel s strukturerad som flera kompositör paket. Så säga om du ville ta i en autentiseringspaket eller om du ville ta in vissa sorts generator manus eller en admin gränssnittet kan du ansluta och spela dessa komponenter med Composer. Så låt oss komma igång. Eventuella frågor från dig killar innan vi börjar? Inga frågor? Cool. Så det första steget är installera kompositör. Så Composer kan du hantera dessa beroenden, oavsett om det är ramverket Laravel eller någon annan tredje part förlängning. Det första kommandot tillåter dig ladda Kompositör, och den andra kommandot kan du flytta den till din lokala bin mapp så att du kan köra Composer direkt genom terminalen. Efter det, gå vidare och skapa ett nytt Laravel projekt. Vi faktiskt kommer att använda vissa exempelkod som jag har satt ihop att skapa den här bloggen. Men om du börjar från scratch, skulle du använda det här kommandot här uppe, kompositör skapa-projektet, Laravel snedstreck Laravel, och sedan namnet på ditt projekt. Och det kommer att omfatta all distributionskod för att starta ett nytt Laravel projekt. Så för din CS50 slutprojekt, kommer du förmodligen vill använda det kommandot. Men vi ska börja med detta. Så när du har gjort att du kommer att få en ganska omfattande antal filer i blog50. Så låt oss bara gå igenom vissa av dessa komponenter. Du kommer att märka på denna väg katalog finns det en app mapp. Inne i appen mappen, det finns ett par hjälp mappar. Notera att börja med är detta config-mappen. Så detta sätter upp hur din webbapplikation är gå till, säg, autentisera människor eller kontant saker eller ansluta till databasen. Och vad är egentligen användbart är att Laravel kan du ställa in olika utvecklingsmiljöer. Så vad vi har gjort här är om vi går under det lokala mappen, det finns en database.php fil. Och du kommer att märka här att vi inrätta en MySQL-anslutning som tillåter individer att ansluta till MySQL-servern som är direkt på CS50 apparaten. Och vi ska ansluta till en databas att jag ställer upp som heter Blog50. Så låt oss faktiskt gå vidare och kör arbetsversion av detta, bara för att få en känsla för vad det applikation som vi bygger ser ut. Så jag har en kopia av denna Blog50 klar. Så Laravel faktiskt har byggt i en server att du kan köra direkt från kommandoraden. Så detta liknar den Pset innan när du faktiskt bygga din egen server i C. Så de har en inbyggd så att du kan köra dina Laravel appar direkt från kommandoraden. Så om vi gör php hantverkare tjäna, här kommer att lansera en utvecklingsserver på port 8000. Så om vi går till lokala värden 8.000, kommer du att märka det, hej. Vi har vår blogg igång. Så Laravel här genererar förstasidan på vår blogg. Mycket enkel applikation. Men det finns ett par verkligen fiffiga funktioner att den ger under huven. Så bloggen programmets okomplicerad. Om vi ​​ville skapa ett inlägg, vi kan klicka på den knappen. Vi kan säga, "Hej, alla. Detta är ett riktigt roligt seminarium, "till exempel. Och skriva något här nere. Text här. Om vi ​​klicka på Skicka, du ska märker att vår nya blogg inlägget har lagts till i förstasidan av bloggen. Om vi ​​går tillbaka hit, kommer du att märka att det har varit några kommentarer redan på bloggen. Så om vi rulla ner, kommer du märker att Jonathan Tan säger att han var väldigt fascinerad av det här inlägget. Så vi ska gå in på hur objektet relationell mappning möjliggör dig att göra dessa relationer i ett ganska smidigt sätt också. Cool. Eventuella frågor om funktionalitet av vad vi ska bygga? Cool. Så låt oss börja med faktiskt skapa databastabeller. Så minns att i CS50 Finance, du sätta ihop en tabell för användarna liksom för den bestånd i din portfölj. Så som vi nämnde tidigare, vad vi använder i Laravel är något som kallas migreringar. Så om vi går tillbaka till distributions koden här, det första kommandot som är hjälp att Laravel ger dig är detta migrate kommandot. Så vi kan göra php hantverkare Migrera: gör. Så detta gör att vi kan skapa en migrering. Och då ska vi ha att skapa en migrering kallas create_posts_table, som kommer att vara där vi ska vara att lagra våra blogginlägg. Och du kommer att märka här att det går genom en del kod som faktiskt genererar en fil med en tidsstämpel på den. Så om vi går och tittar på Databas, vi kommer att märka i Migra att det är skapat ett tom fil för oss som har standardtext kod med namnet att vi specificerade, skapa inlägg bord. Och det har två funktioner i den. Up är vad vi vill köra när migrering appliceras till databasen. Och ner är vad vi ska göra när vi vill vända en migrering. Så här ska vi börja med att skriva denna migration. Så det finns en hjälpklass i Laravel kallas Schema. Så vi kommer att köra Schema :: skapa. Och vi kommer att skapa en tabell som kallas inlägg. Och här är vi tillämpa denna med hjälp av en funktion. Och inom här, ska vi faktiskt specificera innehållet i vårt bord. Vi kommer att skapa ett ID, vilket är automatisk uppräkning. Dessutom kommer vi att skapa ett fält som representerar titeln på vår blogginlägg. Vi kommer även att skapa ett fält för lagring texten i vår blogginlägg. Och slutligen, vi kommer att lagra vissa tidsstämplar när vår post skapades och när den är uppdaterad. Och för ner, det är ganska enkelt. Allt vi vill göra är att släppa tabellen som vi har skapat. Stor. Några frågor? Så nu om vi går framåt och-- faktiskt, lokal värd, Låt mig ta bort vad vi hade tidigare. Gå till databaser. Jag ska ta bort vad vi hade tidigare. Släpp det här och skapa en ny databas Blog50. Så nu vad den magiska del är här som vi kan tillämpa dessa migreringar direkt till databasen med hjälp av kommandoraden verktyg. Så om vi gör php hantverkare migrera, du kommer att märka det, hej. Det har skapat migrationsbordet, som vi tar en titt på i lite, och det har tillämpat denna första migration. Så vi tittar på Blog50, kommer du att märka att det är skapat två tabeller för oss. Först är detta migreringar tabell. Så om vi bläddra i den här, kommer du att märka att denna tabell är ganska okomplicerat. Det är bara säga att, hey. Vi har tillämpat denna migration. Vi går tillbaka och tittar på inlägg. Du kommer att märka att strukturen är precis vad vi hade bett den. Vi har en auto-inkrementering ID. Vi har en sträng för att lagra titeln, och ett textfält för lagring av innehållet. Stor. Cool. Eventuella frågor om migration arbete, hur vi kan använda dem? Nej? Cool. Så nu ska vi gå vidare och faktiskt skapar modellen. Så vi vill skapa en inlägg modell som lagrar en abstraktion av databasen. Så istället för att göra MySQL-frågor direkt, vi kommer att skapa. Så vi måste skapa en mapp i här kallas modeller. Och inne här, ska vi skapa en fil som heter post.php. Inuti denna PHP-fil, vi kommer att skapa en klass post som sträcker vältalig. Vältalig är namnet på ORM motor som Laravel tillhandahåller. Och här, kanske vi förvänta oss att du faktiskt behöver skriva lite kod. Vi kommer att skriva lite hjälparfunktioner senare. Men ur lådan, kommer detta redan känner igen vad som finns i databasen och vi kan komma åt, säger, texten av vår blogginlägg eller titeln, och skapa saker direkt med ganska mycket ingen kod alls. Så det är en av de magiska komponenter. Och vinden när denna klass är mer fullfjädrad, vi ska innehålla information om vad det är relaterat till, så kommentarerna. Skapa även en funktion så vi kan faktiskt direkt få webbadressen av ett blogginlägg sida. Cool. Eventuella frågor om detta? Nej. Cool. Så nu när vi har vår modell, vi vill skapa en styrenhet som är kunna samverka med dessa modeller, och därefter databasen. Så om vi tar en titt på BlogController, du ska märker att det finns inte mycket här just nu. Allt som finns är en indexfunktion som genererar hemsidan, men utan något där för att visa ännu. Så den första funktionen att vi kommer att skapa är en som tillåter oss att skapa ett blogginlägg. Så vi kommer att förklara en ny funktion kallad newPost. Och inne här enkelt, vi kommer för att ställa in layouten på denna sida att vara en rendera version, om du minns från CS50, av denna mall kallas blog.new, vilket vi kommer att skapa i en liten bit. Du kommer att märka här på line sex som Vi specificerade denna variabel, layout. Och om vi tar en titt vid Vyer mappen det finns en layout mapp, som innehåller en mycket grundläggande HTML-fil. Och notera, kommer du att märka att vi har den här behållaren här som ger innehållet. Så insidan av vår mall vad vi ska göra är att skapa vad som kommer att bli ersattes direkt i den här layouten. Så vi sa att vi vill göra en mall som kallas blog.new. Men inne i Blog, det finns ännu inte denna nya mallen. Så vi kommer att skapa en fil som heter new.blade.php. Detta talar Laravel som denna PHP-fil bör renderas med blad mall motor. Så det här är en ganska okomplicerad fil. Det kommer att bli i form av vilka vi faktiskt lägger i ett blogginlägg. Så magin här från arv är att, hey. Vi vill ange att avsnitt, innehålls sektionen Här, som avgränsas genomsection ochstop. Så vad som finns i mellan här kommer att vara substituerad i master layouten. Och här vad vi vill göra är att mycket helt enkelt skapa en ny HTML-fil. Låt oss bara lägga en snabb titel. Lägg ett blogginlägg. Och inom den, vi är kommer att skapa ett formulär. Denna form kommer att få en åtgärd. Och detta kommer att vara något att vi ersätta senare, och vi får se hur routing passar in här. Men vi kommer bara att definiera för nu att detta går till en webbadress med rutten från createPost. Och sedan detta kommer att ha metod inlägg. Inom här kommer vi att ha två fält. Div class = "formgrupp". Vi använder Bootstrap CSS-biblioteket nådigt tillhandahålls av Twitter. Så vi kommer att skapa två av dessa. Så denna första ingång är kommer att vara titeln. Så input name = "title". Klass = "formcontrol". Type = "text". Jag ska lägga en platshållare = "titel". Och sedan den andra är kommer att bli ett textområde. Namn = "content". Klass = "formcontrol". Och platshållare = "Skriv här". Det går vi. Slutligen ska vi lägga till en snabb skicka-knappen. Type = "submit" class = "BTN btn-primär". Så dessa är alla funktioner i Bootstrap så att detta kan läggas ut på ett sätt som är offer för användaren, snarare än nakna HTML. Så vi har definierat styrenheten här. Vi har definierat en mycket enkel vy. Men vad som saknas är bindväv. Så på denna punkt, Laravel har ingen aning om hur vi ska faktiskt åtkomst till denna regulator. Så detta definieras i en fil som heter routes.php. Och just nu har vi en rutt. Vilket är när vi går till hem väg för denna webbplats, det kommer att göra indexstyrenheten. Så här vad vi behöver göra är att genomföra en ny väg för oss att skapa ett inlägg. Så vi använder den här metoden få, som specificerar att när en användare försöker att få detta page-- specifikt posten slash nya page-- vad vi ska göra är använd regulatorn kallas BlogController nytt inlägg. Det som vi just skapat. Och sedan kommer vi att alias det som newPost. Vi kommer att skapa en annan funktion i en liten bit. Men vad är här under nyckeln "som" är vad vi kan ersätta inom våra Blade mallar. Så för nu, låt oss faktiskt också säga rutt. Så vi kommer också att skapa en styrenhet så att vi kan skapa dessa tjänster. Så om en användare postar till sidan inlägget slash nytt, vad vi ska göra är använder en regulator som vi kommer att skapa kort kallas BlogController vid createPost. Och vi kommer att alias detta med så createPost. Cool. Några frågor? Cool. Så låt oss köra vad vi har hittills. Så om vi gör php hantverkare tjäna, Vi kommer att se massor av fel. Så det ser ut som vi har en syntaxfel på linjer linje 27. Ah. Saknas ett semikolon. Så om vi går till 8.000, ser du inget här ännu. Så detta är standard hemsidan. Men om vi går att posta slash nya, hej. Det blir den form som vi just skapat. Just nu har vi inte genomfört funktionaliteten om när vi trycker på skicka. Så om vi klickar på Submit knapp, det kommer att köra ett fel. Men vi kommer att kod som just nu, precis vad vi vill göra när en användare lämnar denna form. Så låt oss göra det. Gå tillbaka till Controllers filen. Vad vi ska göra är genomföra denna nya funktion som tillåter oss att skapa ett inlägg. Deklarera ny funktion. Offentlig funktion createPost. Och denna funktion kommer att bli en lite mer sofistikerad än vad vi hade tidigare. Men du ser här att vi inte är kommer att faktiskt skriva någon SQL. Den ORM, den vältalige ORM, kommer att tillåta oss att göra detta i en del sätt en mer elegant sätt. Så vi kommer att skapa ett nytt inlägg. Och här är vi instansiera ett nytt objekt från den modell som vi bara skapat, eftermodellen. Och vad vi ska göra är att ställa in title attributet för detta med hjälp av något som vi får från servern. Så detta liknar vad vi hade tidigare i CS50 Finans där vi skulle göra, med hjälp av Super Global Post söker titeln. Så Laravel ger viss sanitet och allt med hjälp av denna hjälpare funktion. Så vi skulle föredra att använda denna i stället av detta mycket grundläggande rå form från PHP. Och sedan vad vi ska göra är att ställa innehållet i den till Input få innehåll. Vi faktiskt kommer att linda detta i en hjälpsam funktion att PHP ger kallas nl2br, vilket förvandlar nya linjer, NLS, till brs, raster, så att vi faktiskt kan ha olika punkter inom det. Och slutligen vad vi tänker göra är att spara det här inlägget. Så vi kallar funktionen spara på denna modell. Vi kommer att spara posten. Och slutligen vad vi ska göra är omdirigera användaren specifikt till rutten som vi ska skapa kort, alias vid viewPost. Och vi kommer att passera i de argument id, som är id för denna nya tjänst. Stor. Så nu om vi faktiskt gå och köra detta. Vi kommer att lägga till en ny post. Låt oss säga att det här är seminariet 50. Och säg, säkert. ADSL. Oavsett. Någon sorts innehåll. Och skicka in det. Och vi kommer att märka det, hej. vägar som inte definierats. Men om vi tar en titt på phpMyAdmin och leta efter huruvida vår funktion gjorde något. Titta på Blog50 inlägg. Vi kommer att märka det, hej. Faktum är att vi bara skapa den blogg inlägg med de tidsstämplar som anges. Så nu ska vi gå tillbaka och faktiskt skapa denna andra funktion i vår controller, specifikt viewPost controller. Så offentlig funktion viewPost. Så här vad vi ska göra, i stället av att ha tomma parenteser, vi vill passera på ID posten som vi skapar. Och härifrån vad vi ska göra är faktiskt söka i databasen för det. Så om vi vill skapa, det finns en funktion som heter Hitta som tillåter oss att ifrågasätta det genom ID. Specifikt faktiskt, ska vi använda en alternativ version av denna kallas Hitta eller underkänd, vilket gör att vi att sluta ut ur denna funktion, kasta ett undantag om ID vi passerar in finns inte. Och sedan ska vi göra något liknar vad vi gjorde tidigare där vi satt innehållet på sidan för att vara den renderade versionen av denna nya syn som vi ska skapa, blog.view. Och vi kommer att passera in det-- precis som i CS50 render function-- en ordbok av variabler. Nycklarna till denna associativ array bli variabler inom mallen. Så vi ska göra efter inlägg. Så pass indirekt posten som Vi har frågas från databasen. . Nu vad vi ska göra är att skapa denna vy så att vi faktiskt kan se de blogginlägg som vi har byggt. Så vi kommer att skapa en fil som heter view.blade.php. Så inne i denna mall, vad vi ska göra är sammanställt en enkel sida som tillåter oss att visa innehållet. Så vi gör avsnittet, det är före innehåll. Stopp. Och vad vi ska att göra inom här är skriva lite HTML för att visa den här sidan. Så vi kommer att slå in den med en prydlig nya HTML5 element som kallas artikel. Och här kommer vi att ha en rubrik där vi ska helt enkelt ha en h1, vilket inkluderar efter titeln. Så här, om vi ser på det här dubbla klammerparentes notation, Detta kommer att göra i stort sett PHP echo inlägg titel. Så det är en hjälp stenografi att Laravel ger oss. Så vi kommer att använda denna notation i stället. Och här, ska vi också skriva ut innehållet i den. Och här kommer vi att göra efter innehåll. Och nere på botten vad vi är kommer att göra är att skapa en sidfot. Och i sidfoten, ska vi första display när detta var postat. Så detta var postat på, skapas vid. Och Laravel använder en riktigt trevlig datum bibliotek kallat Carbon. Så vi kan faktiskt göra något som kallas difforHumans, som ni såg tidigare. När vi skrev. Det ska säga, liknande, fem sekunder sedan. Så det här är en riktigt trevlig funktionalitet Laravel. Och slutligen, vi kommer att stänga denna sidfot. Så nu om vi går tillbaka till Hemsida ska vi att se inget här ännu eftersom vi har inte kodat upp hemsidan. Men om vi går att posta snedstreck en, vi kommer att se ett undantag. Någon som vet varför Vi ser ett undantag? Vad är det vi saknar? Några idéer? Så vad gjorde vi gör tidigare för oss faktiskt att definiera hur vi kommer till speciella styrenheter? SPEAKER 1: Vägen? ERIC Ouyang: Yeah. Så vi har fortfarande att definiera rutten. Så vi går tillbaka hit för att routes.php. Du kommer att märka att vi har faktiskt inte definierat hur vi kommer att få till denna regulator. Så nu ska vi definiera den vägen. Det är ganska enkelt, liknar vad vi gjorde tidigare. Men vad vi ska märka här är att vi kommer att ha en platshållare. Så om vi gör route.get snedstreck inlägget ID. Så ID är nu vad som kommer att ledas in i regulatorn. Detta kommer att använda controller att vi bara skapas, BlogController vid viewPost. Och vi kommer att alias detta som viewPost. Stor. Så nu ska vi skapa denna rutt. Så nu om vi går här och uppdatera den här sidan, vi faktiskt har vår nya blogginlägg. Så detta är vad vi skapade tidigare. Mycket enkel sida, men visar blogginlägg som vi just skapat. Cool. Och om vi faktiskt gå igenom hela processen för att skapa ett nytt blogginlägg, vi kommer att märka att allt omdirigeringar ordentligt. Om jag säger, "Hej. Jag är Jonathan Tan. " Säg, "Det här är mitt blogginlägg." Och skicka in det, detta kommer att skapa denna nya blogginlägg med ID 2, vilka steg från vad vi hade tidigare och visar det ordentligt. Grymt. Några frågor? Ja? TALARE 2: Gör Laravel handtag sanering och allt för dig? ERIC Ouyang: Ja. Så när vi såg tidigare när vi gjorde ingångs kolon kolon få, som sanitates någon SQL injektioner och allt att vi kanske vill utföra, om vi är en illvillig användare av webbplatsen. Så Laravel hanterar mycket av att bakom kulisserna. Bra fråga. Så låt oss ta en titt på hemsidan. Så om vi först gå tillbaka till controller för hemsidan, du kommer att märka att det gör inte mycket här. Du kommer att märka att vi inte är passerar in i denna regulator något särskilt hjälpsam. Det är bara den här indexfilen. Så låt oss gå in i detta något användbart. Och specifikt är vi kommer att passera i inlägg. Och Laravel tillåter oss att göra inlägg alls, vilket ger oss möjlighet att få alla inlägg. Om vi ​​nu går tillbaka till index.php, ser du, hej. Inget här ännu. Men vad vi vill göra här är faktiskt iterera igenom, gör en foreach loop över de tjänster som ger oss möjlighet att skriva ut stolparna. Så foreach inlägg som post, vad vi vill göra är skriva ut innehållet av blogginlägg. Men en sak du kommer att märka är att vi faktiskt skrev det mesta av denna kod redan i view.blade.php. Så vad vi ska faktiskt göra är använd en trevlig hjälpsam inslag i Blade och faktor ut denna gemensamma kod. Så vi går här. Vi kommer att ta det här innehållet just här, och vad vi ska göra är att skapa en ny mapp. Låt oss bara kalla det Partials. Och här kommer vi att skapa en post.blade.php. Så här, vi räknade ut hur som vi vill visa dessa tjänster. Och här vad vi ska göra i stället för faktiskt ha denna HTML direkt, vi kommer att använda detta direktiv kallas inkluderar blog.partials.post. Och vad vi ska göra här är passerar på posten på sidan. Så nu om vi går tillbaka hit, vi ska märker att funktionaliteten är fortfarande samma. Men nu har vi det här räknade ut kod, denna HTML. Så vi kan använda den i index. Så här, är detta mycket enkelt. Allt vi gör är inkludera blog.partials.post och matris. Och någonstans att innan, gör vi efter inlägg. Så nu om vi går tillbaka till hemsida, vi får se det, hej. Vi har en lista på alla blogginlägg som vi hade innan. Vi kanske vill lägga till några "om" villkor och "else" betingelser så att om vi inte har något på bloggen, Vi vill visa något användbart. Liksom, hej. Det finns inget innehåll ännu på bloggen. Och om ni faktiskt titta på distributionskoden på GitHub, ser du ett exempel på hur vi gör det. Cool. Några frågor? Ja. TALARE 2: Jag antar bara en grundläggande fråga. Tillbaka på vägen. ERIC Ouyang: Yeah. Om vi ​​tar en titt på vägar. TALARE 2: Var gör uses.blogcontroller på skapa inlägg, vad betyder det rikta oss till? ERIC Ouyang: Yeah. Yeah. TALARE 2: Eller vad är that-- ERIC Ouyang: Så, ta en titt, säger till exempel, denna väg här. Den första delen är själva URL som användaren kommer att gå till. Och denna array här, associativ array, definierar hur vi vill ha det Ansökan agera som svar på det. Så använder är regulatorn, den funktion som vi vill ringa när en användaren går till denna URL. Så viewPost just här var en funktion som vi definierat inne av BlogController-- TALARE 2: Jag ser. ERIC Ouyang: --so att vi kan faktiskt göra en vy, utföra vissa beräkningar, interagera med SQL-databas. TALARE 2: OK. ERIC Ouyang: Och sedan den andra del ", som" är ett alias som vi använder. Så om vi märker när Vi skapade formuläret, du kommer att märka att URL :: routecreatePost. Så det ersätter i själva URL så att vi inte är hårt kodning dessa i så att vi kan ändra det gång, säger om vi ville byta namn. Istället för stolpen snedstreck nytt, vi vill göra något liknande, p slash nytt bara för att rengöra upp våra webbadresser en bit. Vi skulle ändra det på ett ställe i stället än i alla de olika filer. Cool. Det är bra. Så nu har vi en mycket grundläggande blogg plattform. Vi vill nog att lägga i en knapp så att vi faktiskt kan skapa nya inlägg. Så om vi tar en titt på Layout Master, vi har en sektion som heter Header Höger att vi bara har definierat upp på toppen. Så vi kan lägga till knappar till toppen av huvudet. Så om vi går till index.blade.php, faktiskt gör är att definiera vad som händer inne i här. Så denna Header högersektion, vad vi ska göra är att lägga in en knapp för att gå till URL definieras av rutten nytt inlägg. Bara för att rensa upp och göra det vackra och allt Bootstrap, vi ska göra detta en standardknapp. Låt oss bara göra det stort för skojs skull. Och inuti den, kan vi sätta lite text. Men vad Bootstrap ger är glyphicons. Så vi kan faktiskt lägga in att trevlig penna som vi såg tidigare. Glyphicon. Glyphicon-penna. Så detta ger oss möjlighet att sätta i en ikon i stället för text. Nu om vi slutar, här kommer att definiera detta avsnitt. Och, hej. Vi har en fin knapp som länkar oss direkt till lägga ett blogginlägg sida. Så vi har en ganska enkel blogg. Vi kan lägga saker till den. Men vad vi i allmänhet förväntar från bloggar är att kommentera. Så det är verkligen viktigt för oss att ha, säga om någon annan besöker en webbplats och verkligen gillar det stolpen som de kan engagera sig i diskussioner med andra människor som besöker sidan. Så vi kommer att gå och skapa en nya databastabell och en ny modell så att vi kan associera kommenterar med inlägg. Så det första steget, precis som tidigare, är att vi måste köra en migrering. Så som förut, vi gör php hantverkare migrera: gör. Och vi kommer att skapa en kallas create_comments_table. Detta kommer att skapa en fil som har vår nya migration. Och vi kommer att, liksom innan, definiera en ny tabell. Så Schema :: skapa ett Tabellen heter kommentarer. Denna funktion här. Och inuti denna tabell vad vi ska göra är att först, som förut, tilldela ett ID. Ökar ID. Vi kommer att tillåta användare att associera deras namn med en viss kommentar. Vi kommer att ha en del innehåll som går med på detta, textinnehåll. Och här vad vi ska gör är något annorlunda. Vi kommer att skapa ett heltal som kallas post_id som kommer att betyda vad inlägget en särskild kommentar går med. Dessutom, vi faktiskt kommer att ställa en främmande avgörande begränsning på detta. Så MySQL kommer driva det. Vi försöker inte tilldela kommentar nummer 5 att posta 5.000 om vi har inte hade 5.000 inlägg på det. Så vad vi gör här, vi gör utländska post_id kommer att vara associerad med ID-fältet från tabell inlägg. Och vi ska faktiskt göra något annars bra, är onDelete. Så om vi tar bort en del posta från databasen, att vi vill kaskad av raderar för kommentarer också. För det är inte till stor hjälp för oss att ha synpunkter på inlägg som inte existerar. Och slutligen, som förut, vi är kommer att ställa tidsstämplar på denna. Och precis innan, ska vi har den omvända migrationen vara tappa kommentarer tabellen. Så nu om vi går tillbaka hit kommer vi att köra den här migration, hantverkare migrera. Och nu är det tillämpat denna migration som vi just skapat. Så om vi en titt på phpMyAdmin, vi gör, i själva verket, nu har en kommentar tabell som har struktur som vi just angivit. Så som förut, vi är kommer att skapa en ny modell till abstrakt SQL bordet att vi just skapat. Så låt oss Lägg till en ny fil. Vi kommer att kalla det comment.php. Och detta faktiskt kommer att vara ganska okomplicerat med en liten förändring från vad vi hade tidigare. Så klass Kommentar utökar Vältalig. Och vad vi ska att göra här är definiera en funktion som är relation med andra modeller. Så vi kommer att ha ett inlägg funktion Här som returnerar detta förhållande. Så vi anger att detta hör att posta, säga att det finns ett inlägg att denna kommentaren tillhör. Detta har faktiskt vara kapital P för modellen. Och nu precis på andra luckan sida, måste vi säga det, hej. Inlägg har synpunkter. Så vad vi ska göra är definiera offentliga kommentarer funktions. Och här är tillbaka Detta har många Kommentera. Så nu magiskt när vi har ett inlägg, vi kan få attribut kommentarer och det ska fylla den med de information från databasen. Så låt oss faktiskt gå igenom och lägga till en ny funktion till vår uppfattning fil så att vi kan både display och skapa kommentarer. Så vi kommer att definiera ett nytt avsnitt. Låt oss bara separera den med en horisontell linje. Avsnitt id = "kommentarer". Vad vi ska göra här är, liksom tidigare, iterera igenom alla kommentarer. Så egentligen hur vi gör detta är, som jag nämnde, ganska magiskt. Vi gör skriva kommentarer. Och då kan vi göra det för varje slinga över varje kommentarerna. Och vad vi ska göra är div class kommentar, och vi ska faktiskt skriva ut den här kommentaren. Så visa att hey, kommentera name-- personen som postat detta comment-- säger dot dot dot. Vi kommer att sätta detta i ett block citat, bara för att det ser trevligt. Och sedan kommentera innehållsblock citat. Och foreach. Så nu detta kommer att slinga genom alla kommentarer som är associerad med var och en av stolparna och visa var och en av dessa synpunkter. Jag ska lägga till en annan avdelning ner Här, som tillåter oss att lägga till en kommentar. Så h3 class. Sätt en titel här. Lägg till en kommentar. Och vi kommer att definiera en ny form. Så som förut, vi är kommer att göra form action. Och här är den nya åtgärden är vi kommer att definiera en ny styrenhet som tillåter oss att svara för att posta önskemål om att skapa kommentarer. Så URL :: rutt createComment. Jag ska passera i parametern här. ID för inlägg som vi skapar kommentera. Och sedan förfarandet enligt denna formen kommer att vara inlägg. Nu ska vi lägga in en två fält, formulär grupp. Detta kommer att bli en ingång med name "namn" och class = "formkontroll", type = "text", och med det platshållare = "Ditt namn." Vi kommer även att definiera annan form fält, vilket kommer att bli en text område som vi hade tidigare. Precis som tidigare, kalla det innehåll. Class = "formkontroll." Platshållare = "Skriv här." Och bara så att vi kan faktiskt skicka det, skicka typ och class = "BTN btn-primära." Stäng formuläret. Stäng den här åtgärden. Så nu om vi uppdatera sidan där vi har, säg, en viss tjänst. Vi måste starta om servern. PHP hantverkare tjäna. Starta detta. Vi måste definiera rutten. Men för nu, låt oss bara ta detta ut så att vi faktiskt kan visa dig vad sidan ser ut, och sedan vi faktiskt skapa den vägen. Så, hej. Vi har denna nya form här nere så att vi kan skapa kommentarer. Så låt oss faktiskt definiera en funktion inom regulatorn så att vi kan lägga till kommentarer. Låt oss gå tillbaka. Och inom blogcontroller.php, vad vi ska göra är att skapa en ny funktion kallas skapar kommentar. Offentlig funktion createComment. Detta kommer att ha en enda parametern, ID för stolparna att vi kommentera. Och precis innan, vi är kommer att först få posten. Så posta, findOrfail id. Efteråt kommer vi att skapa en ny kommentar. Så kommentera = ny kommentar. Kommentar name = Ingång :: få namn. Kommentera content = samma nya linjen in avbrott på Input :: få innehåll. Och slutligen, vi kommer att behöva associera den här kommentaren med posten. Så vi kommer att använda denna funktion, kommentarer, som tillåter oss att spara detta förhållande. Så nu denna kommentar kommer att ha automatiskt inläggets ID. Vi kunde också ställa in den manuellt, är men detta mer lättläst så långt som funktionen går. Och efter att vi utför detta, vad vi vill göra är omdirigera användaren till rutt som viewPost med arrayen med parameter i inläggets ID. Och nu så att detta faktiskt funktioner, måste vi definiera den vägen. Rutt :: inlägg. Och nu ska vi kalla detta post slash ID snedstreck kommentar. Array använder den nya funktionen att vi just skapat. BlogController. CreateComment som createComment. Stor. Så nu förhoppningsvis om vi uppdatera sidan och lägg i en kommentar, säg, David Malan. "Förhoppningsvis fungerar." Skicka. Vi, i själva verket har en kommentera detta blogginlägg. Cool. Så nu har vi en ganska funktionell blogginlägg. Vi ska bara lägga till ett par tweaks så att vi har lite mer användbar information om dessa inlägg. Så om vi går tillbaka till förstasidan har vi ingen mening hur många kommentarer är På var och en av dessa tjänster. Så vad vi faktiskt kommer göra är, i vår modell, definiera en hjälpare funktion som gör oss att specificera antalet kommentarer att gå med en viss tjänst. Så vi kommer att skapa en hjälparfunktion. Offentlig funktion. GetNumCommentsStr. Så en sträng som anger antalet av kommentarer som går längs med den. Och vad vi ska göra är att säga att num = detta kommentarer räknas. Så vi kommer att räkna antalet kommentarer. Och om detta antal är lika med 1, är vi bara att återvända 1 kommentar. Och sedan annars vi vill återvända sammanfogningen av num och kommentarer, så vi får pluralise korrekta. Bara göra detta ett enda anbud. En kommentar. Och nu kan vi använda den här funktionen direkt inne i vår uppfattning. Så om vi går tillbaka till partiella inlägg som vi skapade, Nu vill vi faktiskt visa antalet kommentarer. Så vad vi kan göra är post, använda denna funktion att vi bara skapats för att visa antalet kommentarer. Så om vi nu uppdatera, det gör, faktiskt, display siffer kommentarer att gå med på det. Om vi ​​ville vara snygga om du faktiskt titta på distributionskoden, vi faktiskt kan länka detta till kommentarerna. Om ni minns, definierade vi inom se att detta har avsnittet ID kommentarer. Så om vi ville verkligen att länka direkt till kommentarerna, vad vi skulle göra här är en href URL av rutten viewPost. Pass i arrayen ID av post-ID. Och då är vi vill gå till specifikt kommentarerna. Här ska vi stänga En tagg. Så nu om vi uppdatera sida, vi klickar på den här. Vi ska gå direkt till avsnittet kommentarer. Om vi ​​hade en längre inlägg, kan du faktiskt se denna studs ner. Men du kommer att märka att det är inte överst på sidan. Cool. Stor. Så det är en ganska okomplicerad exempel på något enkelt att du kan göra med Laravel. Men du kan märka här att Vi har gjort en massa saker med ganska liten mängd kod. Laravel tillåter oss att göra det SQL-frågor bakom kulisserna. Det gör sanitet för oss bakom kulisserna. Tillåter oss att göra dessa relationer mycket lätt utan att vi behöver att göra någon SQL gå uttalanden till kombinera kommentarer med vad stolparna. Tillåter oss att göra detta arv av mallar så att vi kan definiera dessa häckande filer så vi inte upprepa oss själva, precis som när vi hade att visning av blogginlägg att vi inte behöver kopiera koden klistra. Och härifrån kan du bygga alltmer komplicerade tillämpningar. Du kan föreställa dig om vi ville genomföra logga in, Vi skulle kunna säga, ta in en tredje part ramverk som tillåter oss att göra det. Det finns ett gäng av dem som är riktigt, riktigt stor som kan göra som, återställning av lösenord. Och det skickar en återställa lösenord e-post. Vi kan genomföra tillstånd så att jag kan skapa ett inlägg, men någon annan inte kan redigera den. Vi kan genomföra funktionalitet för att radera inlägg. Men du kan se här att vi har ganska mycket alla rudimentära komponenter att bygga några riktigt, riktigt, dynamiska och spännande webbappar. Så med det, jag tycker vi är bra. Har ni några frågor? Ja? TALARE 3: Hur gör du få statiskt innehåll? ERIC Ouyang: Statisk innehåll. Så du såg innan att när vi hade denna rätt här, det här innehållet layout, view make, hade vi här utan denna array efteråt. Blog.index hade vi här som bara en statisk fil. Så om vi inte klarar någonting med till det, Det ska bara göra HTML direkt. Men om vi passerar i detta associativa rad inlägg, vilket är dynamiskt dras från databasen, vi kan göra sidan dynamisk. Cool. Fler frågor? SPEAKER 3: Hur skulle du jämföra Laravel till kanske några andra alternativ? ERIC Ouyang: Visst. Yeah. Så Laravel är-- det är en stor question-- ett av många alternativ för webbramverk. Så Ruby on Rails är en som är populärt. Jag tror Twitter brukade vara implementeras med Ruby on Rails. Jag tror de har sedan bytt. Det finns en annan som heter FuelPHP. Så Ruby on Rails använder Ruby språket och genomför en hel del av MVC grejer som vi ser här. FuelPHP är en annan PHP ramverk. Django är en av mina favoriter. Det är ett webbramverk för Python. Så du kan skriva din webb app i Python. Så det finns en ton av dessa alternativ. Laravel, tror jag, med och stor är min favorit rätt nu PHP bara för att av komponenterna att vi talade om tidigare. Det är Composer aktiverat. Den innehåller en riktigt, riktigt uttrycks ORM system. Har också en riktigt häftigt mall språk som vissa av de andra bara inte ge. Och migreringar. Migra är awesome också. Cool? Grymt. Tja, tack så mycket för titta här seminariet, och lycka till på din slutliga projekt.