[Musik spiller] ERIC Ouyang: Hey, alle. Velkommen. Dette er Bygning Dynamic Web Apps med Laravel. Mit navn er Eric Ouyang. Jeg er en sophomore studerer samfundsfag med en sekundær i datalogi, og jeg bor i Adams Hus her på Harvard. Så Laravel på sit mest centrale, er en MVC web app rammer. Så kan lide hvad du fyre har gjort med CS50 Finance, Laravel er en ramme, der giver mulighed dig at opbygge dynamiske web apps. Så du kan tænke på det i nogle sanser som en udvidelse af den type ting du har gjort i CS50 Finance, men et system, der er meget mere robust, en masse mere elegant i nogle sanser, og giver en masse funktionalitet for dig at bygge temmelig kompliceret webapplikationer. Så lad os gå igennem nogle af de vigtigste funktioner, og så vil vi dykke ned i en eksempel på at bygge en blog ansøgning med Laravel. Så en af ​​de første ting, adskiller den fra MVC type arbejde at du har gjort med CS50 er det indeholder en ORM motor. Så ORM står for objekt relationel mapping. Så dette giver dig mulighed for at opbygge et lag af abstraktion mellem databasen og dine controllere. Så i modsætning til i CS50 Finance, hvor du direkte lave forespørgsler, ORM lag gør det muligt at abstrakt som væk og skabe modeller, der er mere magtfulde end Du kan direkte med SQL-forespørgsler. En anden ting, der er virkelig nyttigt er arvelige skabeloner. Så du vil opdage i CS50 Finance, du ender omskrivning en masse ting, hvor placerer du kunne potentielt genbruge ting, du ikke er i stand til. Så her i Laravel, kan du bruge, hvad der er kendt som bladet skabelon motor at skabe en master layout. Og derfra kan du arve således at sub-skabeloner kan faktisk omfatte elementer inden at større basis skabelon. Migration. Så dette er en temmelig standard funktioner på de fleste moderne web-applikation rammer. Så dette giver dig mulighed for at repræsentere databaseskema ændringer i koden. Så uden at gå at sige, phpMyAdmin, du rent faktisk kan skabe disse vandringer hvor du repræsenterer databasen skemaændringer i kode direkte. Og det giver dig mulighed for at-- især hvis du har flere mennesker, der arbejder på samme web application-- spore disse ændringer, siger i GitHub, eller en anden repository. Så dette er virkelig nyttige og afbøder nødvendigheden til f.eks passerer omkring en masse SQL lossepladser. Og endelig, Composer noget virkelig, virkelig nyttige der giver dig mulighed for at bruge andre folks kode til at gøre fantastiske ting. Så Laravel er struktureret som flere komponist pakker. Så sige, hvis du ønskede at bringe i en autentificering pakke eller hvis du ønskede at bringe i nogle slags generator script eller en admin interface, kan du plug and play disse komponenter med komponist. Så lad os komme i gang. Eventuelle spørgsmål fra dig fyre før vi komme i gang? Ingen spørgsmål? Cool. Så det første skridt er installation Komponist. Så Composer gør det muligt at håndtere disse afhængigheder, uanset om det er Laravel rammer eller en anden tredjepart forlængelse. Den første kommando tillader dig at downloade Komponist, og den anden kommandoen tillader dig at flytte den ind i din lokale bin mappe så du kan køre Komponist direkte gennem terminalen. Efter dette, gå videre og oprette et nyt Laravel projekt. Vi faktisk kommer til at bruge nogle eksempel kode at jeg har sat sammen at oprette denne blog. Men hvis du starter fra bunden, ville du bruge denne kommando heroppe, komponist skabe-projekt, laravel skråstreg laravel, og derefter navnet på dit projekt. Og der vil omfatte alle distribution kode for at starte et nyt Laravel projekt. Så for din CS50 afgangsprojekter, vil du sandsynligvis vil bruge denne kommando. Men vi kommer til at starte med dette. Så når du har gjort at, er du nødt til at få en temmelig omfattende antal af filer i blog50. Så lad os bare gå igennem nogle af disse komponenter. Du vil bemærke på denne rute bibliotek, der er en app mappe. Inde i app mappe, er der et par nyttige mapper. Af note at starte med er denne config mappe. Så dette opstiller hvordan Deres web-applikation er gå til, siger, autentificere mennesker eller kontante ting eller oprette forbindelse til databasen. Og hvad er egentlig nyttigt er at Laravel giver dig mulighed for at oprette forskellige udviklingsmiljøer. Så hvad vi har gjort her, er, hvis vi går under den lokale mappe, der er en database.php fil. Og du vil opdage her, vi oprette en MySQL forbindelse, tillader enkeltpersoner til at forbinde til MySQL-serveren, der er direkte på CS50 apparatet. Og vi har forbindelse til en database at jeg oprettet kaldet Blog50. Så lad os faktisk gå videre og køre arbejder version af denne, bare for at få en fornemmelse af, hvad det program, vi bygger ser ud. Så jeg har en kopi af denne Blog50 afsluttet. Så Laravel faktisk har indbygget en server at du kan køre direkte fra kommandolinjen. Så dette svarer til Pset før, når du rent faktisk bygge din egen server i C. Så de har en indbygget, så at du kan køre dine Laravel apps direkte fra kommandolinjen. Så hvis vi gør php håndværker tjener, dette vil lancere en udvikling server på port 8.000. Så hvis vi går til den lokale vært 8.000, vil du bemærke, at, hey. Vi har vores blog op at køre. Så Laravel her genererer forsiden af ​​vores blog. Meget enkel anvendelse. Men der er et par virkelig smarte funktioner at det giver under hætten. Så bloggen programmets ligetil. Hvis vi ønskede at oprette et indlæg, vi kan klikke på denne knap. Vi kan sige, "Hey, alle. Dette er en virkelig sjov seminar, "for eksempel. Og skrive noget hernede. Tekst her. Hvis vi klikker på Send, vil du bemærke, at vores nye blog indlæg er blevet tilføjet til forsiden af ​​bloggen. Hvis vi går tilbage her, vil du bemærke, at der har været nogle bemærkninger, der allerede på bloggen. Så hvis vi rulle ned, vil du bemærke, at Jonathan Tan siger at han meget var fascineret af dette indlæg. Så vi vil gå ind i, hvordan objektet relationel mapping tillader dig at gøre disse relationer i en forholdsvis problemfri måde også. Cool. Eventuelle spørgsmål om funktionalitet af det, vi kommer til at bygge? Cool. Så lad os starte ud med faktisk skabe databasetabeller. Så minde om, at i CS50 Finans, du sammensætte en tabel for brugerne samt for bestande i din portefølje. Så som vi nævnte tidligere, hvad vi bruger i Laravel er noget kendt som vandringer. Så hvis vi går tilbage til fordeling kode, den første kommando, der er nyttigt at Laravel giver dig er denne migrere kommando. Så vi kan gøre php håndværker migrere: gøre. Så dette giver os mulighed for at oprette en migration. Og så vil vi gerne at skabe en migration kaldet create_posts_table, som vil at være, hvor vi kommer til at være lagring af vores blogindlæg. Og du vil opdage her, at det kører gennem nogle kode, der faktisk genererer en fil med et tidsstempel på det. Så hvis vi går og se på Database, vi vil bemærke under Migrations at det er oprettet en tom fil for os, som har standardtekst kode med navnet at vi angivet, skaber stillinger bord. Og det har to funktioner i det. Up er det, vi ønsker at køre, når migration påføres databasen. Og ned er, hvad vi vil gøre når vi ønsker at vende en migration. Så her lad os starte ud med at skrive denne migration. Så der er en hjælpsom klasse i Laravel kaldet Schema. Så vi kommer til at køre Schema :: skabe. Og vi kommer til at skabe en tabel kaldet stillinger. Og her er vi anvende denne ved hjælp af en funktion. Og inden her, vi vil faktisk specificere indholdet af vores bord. Vi kommer til at skabe et id, der er auto-inkrementeringen. Derudover vil vi at skabe et felt, repræsenterer titlen på vores blog-indlæg. Vi vil også skabe et felt til lagring af teksten i vores blogindlæg. Og endelig vil vi at lagre nogle tidsstempler for når vores indlæg er blevet oprettet og når det blev opdateret. Og for ned, er det forholdsvis enkelt. Det eneste, vi ønsker, er at drop den tabel, vi har oprettet. Store. Eventuelle spørgsmål? Så nu, hvis vi går videre og-- faktisk, lokal vært, lad mig slette det, vi havde tidligere. Gå til databaser. Jeg har tænkt mig at slette det, vi havde tidligere. Drop det og skabe en ny database Blog50. Så nu, hvad den magiske del er her, at vi kan anvende disse vandringer direkte til databasen ved hjælp af kommandolinjen værktøj. Så hvis vi gør php håndværker migrere, du vil opdage, at, hey. Det er skabt af migration bordet, som vi vil tage et kig på i en lidt, og det er anvendt denne første migration. Så vi ser på Blog50, vil du bemærke at det er skabt to tabeller for os. Først er det vandringer tabel. Så hvis vi gennemse dette, vil du bemærke, at denne tabel er forholdsvis ligetil. Det er bare sagt, hey. Vi har anvendt denne migration. Vi går tilbage og se på indlæg. Du vil opdage, at strukturen er præcis, hvad vi havde bedt den. Vi har en auto-forøgelsen ID. Vi har en streng til opbevaring titlen, og et tekstfelt til opbevaring af indholdet. Store. Cool. Eventuelle spørgsmål om vandringer arbejde, hvordan vi kan anvende dem? Nej? Cool. Så nu vil vi gå videre og faktisk skabe modellen. Så vi ønsker at skabe et indlæg model, lagrer en abstraktion af databasen. Så snarere end at gøre MySQL forespørgsler direkte, vi kommer til at skabe. Så vi er nødt til at skabe en mappe i her kaldes modeller. Og inde her, vi vil oprette en fil kaldet post.php. Inde i denne PHP-fil, vi kommer til at skabe en klasse indlæg, som strækker veltalende. Veltalende er navnet på ORM motor, Laravel giver. Og her kan vi forvente, at du rent faktisk har brug for at skrive noget kode. Vi kommer til at skrive nogle hjælperfunktioner senere. Men ud af kassen, vil det allerede erkende, hvad der er i databasen og vi kan få adgang til, siger, teksten af vores blogindlæg eller titlen, og skabe ting direkte med temmelig meget ingen som helst kode. Så det er en af ​​de magiske elementer. Og vind når denne klasse er mere fuldt udbygget, vi vil indeholde oplysninger om, hvad det er relateret til, så kommentarerne. Også oprette en funktion så vi kan faktisk direkte få URL'en af et blogindlæg side. Cool. Eventuelle spørgsmål om det? Nej. Cool. Så nu når vi har vores model, vi ønsker at skabe en controller, der er i stand til at kommunikere med disse modeller, og efterfølgende databasen. Så hvis vi tager et kig på BlogController, vil du bemærke, at der ikke er meget her lige nu. Alt er der er et indeks funktion der genererer hjemmesiden, men uden noget der at vise endnu. Så den første funktion at vi kommer til at skabe er en, der giver os mulighed for at skabe et blogindlæg. Så vi kommer til at erklære en ny funktion kaldet newPost. Og inde her simpelthen, vi vil at indstille layoutet af denne side at være en render version hvis du husker fra CS50, af denne skabelon kaldet blog.new, som vi vil skabe i en lille smule. Du vil opdage her på linje seks, vi angivet denne variabel, layout. Og hvis vi tager et kig på mappevisninger, der er et layout mappe, som indeholder en meget grundlæggende HTML-fil. Og note, vil du bemærke at vi har denne beholder her der giver indhold. Så inde i vores skabelon hvad vi vil gøre er at skabe, hvad der kommer til at være substitueret direkte i dette layout. Så vi sagde, at vi ønsker at gøre en skabelon kaldet blog.new. Men inde i Blog, er der endnu ikke denne nye skabelon. Så vi kommer til at skabe en fil kaldet new.blade.php. Dette fortæller Laravel at denne PHP fil skal gøres med blad skabelon motor. Så dette er en temmelig ligetil fil. Det kommer til at være den form, hvori vi faktisk tilføje i et blogindlæg. Så den magiske her fra arv er, at, hey. Vi ønsker at præcisere, at sektion, indholdet sektion her, som er afgrænset vedsection ogstop. Så hvad der er i mellem her kommer til at erstattes i master layout. Og her, hvad vi ønsker at gøre, er meget blot oprette en ny HTML-fil. Lad os blot tilføje en hurtig titel. Tilføj et blogindlæg. Og i det, vi er kommer til at oprette en formular. Denne formular vil have en handling. Og det vil være noget at vi erstatte senere, og vi vil se hvordan routing passer ind her. Men vi bare kommer til at definere for nu at dette går til en URL med ruten fra createPost. Og så dette foregår at have metode stolpe. Inden her, vi vil at have to felter. Div class = "formular-gruppen". Vi bruger bootstrap CSS biblioteket elskværdig leveres af Twitter. Så vi kommer til at skabe to af disse. Så denne første indgang er kommer til at være titlen. Så input name = "title". Class = "formcontrol". Type = "text". Jeg har tænkt mig at tilføje en pladsholder = "Titel". Og så den anden er vil være en tekst område. Name = "indhold". Class = "formcontrol". Og pladsholder = "Skriv her". Der vi går. Endelig vil vi tilføje en hurtig indsende knap. Type = "send" class = "btn btn-primære". Så disse er alle funktioner i Bootstrap så at dette kan lægges på en måde, der er bytte til brugeren, snarere end nøgen HTML. Så vi har defineret controlleren her. Vi har defineret en meget enkel visning. Men hvad der mangler, er bindevævet. Så på dette punkt, Laravel har ingen idé om, hvordan vi vil faktisk adgang til denne controller. Så dette er defineret i en fil kaldet routes.php. Og lige nu har vi en rute. Der er, når vi går til hjem sti for denne hjemmeside, det kommer til at gøre indekset controller. Så her hvad vi skal gøre, er at gennemføre en ny rute for os at oprette et indlæg. Så vi bruger denne metode få, som angiver at når en bruger forsøger at få dette page-- specifikt stillingen skråstreg nye page-- hvad vi vil gøre er bruge controlleren kaldet BlogController nyt indlæg. Den ene, som vi lige har oprettet. Og så vil vi til Alias ​​det som newPost. Vi kommer til at skabe en anden funktion i en lille smule. Men hvad er her under nøglen "som" er det vi kan erstatte inden vores Blade skabeloner. Så for nu, lad os faktisk også sige rute. Så vi vil også at skabe en styreenhed så vi kan skabe disse stillinger. Så hvis en bruger stillinger til side indlæg slash ny, hvad vi vil gøre er bruger en controller, vi kommer til at skabe kort kaldet BlogController på createPost. Og vi vil alias dette med som createPost. Cool. Eventuelle spørgsmål? Cool. Så lad os køre det vi har hidtil. Så hvis vi gør php håndværker tjener, vil vi se masser af fejl. Så det ser ud som vi har en syntaksfejl på ruter linje 27. Ah. Mangler et semikolon. Så hvis vi går til 8.000, vil du se noget her endnu. Så dette er standard startside. Men hvis vi går for at skrive skråstreg ny, hey. Det vil være den form, vi lige har oprettet. Lige nu, ikke har vi gennemført funktionaliteten på, når vi trykker på knappen Send. Så hvis vi klikker på Indsend knap, det kommer til at køre en fejl. Men vi kommer til at kode, lige nu, netop, hvad vi ønsker at gøre, når en bruger anført denne formular. Så lad os gøre det. Gå tilbage til controllere filen. Hvad vi vil gøre, er at gennemføre denne nye funktion der giver os mulighed for at oprette et indlæg. Erklær ny funktion. Offentlig funktion createPost. Og denne funktion vil være en lidt mere sofistikeret end hvad vi havde før. Men du vil se her, at vi ikke er vil faktisk skrive nogen SQL. ORM, veltalende ORM, vil tillade os at gøre dette i nogle måder en mere elegant måde. Så vi kommer til at lave et nyt indlæg. Og her er vi instantiere et nyt objekt fra den model, vi bare oprettet, stillingen model. Og hvad vi vil gøre, er at sætte title attribut af dette ved hjælp af noget at vi får fra serveren. Så det svarer til, hvad vi havde før i CS50 Finance hvor vi ville gøre, ved hjælp af Super Global Indlæg søger titel. Så Laravel giver nogle sanitet og whatnot bruger denne hjælpefunktion. Så vi foretrækker at bruge dette i stedet af dette meget grundlæggende rå form fra PHP. Og så det, vi vil gøre er indstillet indholdet af det til Input få indhold. Vi faktisk kommer til at ombryde dette i en nyttig funktion at PHP giver kaldet nl2br, som slår nye linjer, NLS, ind br, pauser, således at vi rent faktisk kan have forskellige stykker i det. Og endelig, hvad vi vil at gøre, er at gemme dette indlæg. Så vi kalder funktionen spare på denne model. Vi kommer til at gemme posten. Og endelig, hvad vi vil gøre er omdirigere brugeren specifikt til ruten, som vi kommer til at oprette kort, alias ved viewPost. Og vi kommer til at passere i de argumenter id, er det id af denne nye stilling. Store. Så nu, hvis vi faktisk gå og køre dette. Vi kommer til at tilføje et nyt indlæg. Lad os sige det er seminar 50. Og sige, sikker. ADSL. Uanset hvad. Nogle slags indhold. Og forelægger det. Og vi vil opdage, at, hey. ruter ikke defineret. Men hvis vi tager et kig på phpMyAdmin og se efter, om vores funktion gjorde noget. Kig på Blog50 indlæg. Vi vil opdage, at, hey. Faktisk, vi bare oprette denne blog skrive med tidsstempler som angivet. Så lad os nu gå tilbage og faktisk skabe denne anden funktion i vores controller, specifikt viewPost controller. Så offentlig funktion viewPost. Så her hvad vi vil gøre, i stedet for at have tomme parenteser, vi ønsker at videregive i ID stillingen, som vi er ved at oprette. Og herfra, hvad vi vil gøre er faktisk søge i databasen for det. Så hvis vi skrive, der er en funktion kaldet Find der giver os mulighed for at forespørge den med ID. Specifikt faktisk, vi kommer til at bruge en alternativ version af denne kaldes Find eller Fail, som giver os mulighed at holde op ud af denne funktion, smide en undtagelse, hvis ID vi passerer i findes ikke. Og så vil vi gøre noget svarer til, hvad vi gjorde tidligere hvor vi indstille indholdet af denne side til at være det afsmeltede version af denne nye visning som vi kommer til at oprette, blog.view. Og vi kommer til at passere ind det-- ligesom i CS50 gøre function-- en ordbog over variabler. Nøglerne til dette associative array blive variabler i skabelonen. Så vi kommer til at gøre stillingen indlæg. Så passerer indirekte stillingen som vi har forespurgt fra databasen. . Nu, hvad vi vil gøre er at oprette denne opfattelse således at vi rent faktisk kan se blogindlæg, som vi har bygget. Så vi kommer til at skabe en fil kaldet view.blade.php. Så inde i denne skabelon, hvad vi vil gøre er sat sammen en simpel side, giver os mulighed for at vise indholdet. Så vi gør sektion, det er før indhold. Stop. Og hvad vi vil at gøre inden her er skrive nogle HTML for at vise denne side. Så vi kommer til at pakke det med en fancy nye HTML5 element kaldet artikel. Og her, vil vi at have en header, hvor vi vil bare have en h1, som omfatter stolpen titel. Så her, hvis vi ser på dette dobbelt krøllet tandbøjle notation, dette vil gøre det væsentlige PHP echo indlæg titel. Så det er en hjælpsom stenografi at Laravel giver os. Så vi kommer til at bruge denne notation i stedet. Og her, vil vi også udskrive indholdet af den. Og her, vil vi at gøre stillingen indhold. Og ned i bunden, hvad vi er kommer til at gøre, er at oprette en sidefod. Og i bunden, vil vi første display, når dette blev lagt ud. Så dette blev lagt på, oprettet på. Og Laravel bruger en virkelig rart dato bibliotek kaldet Carbon. Så vi kan faktisk gøre noget, der hedder difforHumans, som du så tidligere. Når vi udstationeret. det vil sige, ligesom fem sekunder siden. Så dette er en virkelig rart funktionalitet Laravel. Og endelig vil vi at lukke dette footer. Så nu, hvis vi går tilbage til Forside vi skal hen at se noget her endnu, fordi Vi har ikke kodet op hjemmesiden. Men hvis vi går for at skrive skråstreg én, vi kommer til at se en undtagelse. Er der nogen der ved hvorfor ser vi en undtagelse? Hvad mangler vi? Nogen idéer? Så hvad gjorde vi tidligere for os faktisk at definere, hvordan vi kommer til særlige controllere? SPEAKER 1: Ruten? ERIC Ouyang: Ja. Så vi stadig nødt til at definere ruten. Så vi gå tilbage her til routes.php. Du vil opdage, at vi har faktisk ikke defineret hvordan vi kommer til at få til denne styreenhed. Så nu vil vi definere denne rute. Det er forholdsvis ligetil, svarer til, hvad vi gjorde tidligere. Men det, vi kommer til at lægge mærke til her er at vi kommer til at have en pladsholder. Så hvis vi gør route.get skråstreg indlæg id. Så ID nu, hvad der kommer til at ledes ind i regulatoren. Dette kommer til at bruge controller, at vi bare oprettet, BlogController på viewPost. Og vi vil alias dette som viewPost. Store. Så nu vil vi skabe denne rute. Så nu, hvis vi går her og opdatere denne side, vi faktisk har vores nye blog-indlæg. Så dette er, hvad vi oprettede tidligere. Meget enkel side, men viser den blogindlæg, som vi lige har oprettet. Cool. Og hvis vi faktisk gå gennem hele processen med at skabe en ny blog-indlæg, Vi vil opdage, at alt omdirigerer korrekt. Hvis jeg siger, "Hej. Jeg er Jonathan Tan. " Sig: "Dette er min blog indlæg." Og forelægger det, vil det skabe denne nye blog-indlæg med ID 2, hvilke trin fra det, vi havde tidligere og viser det ordentligt. Awesome. Eventuelle spørgsmål? Ja? SPEAKER 2: Er Laravel håndtag desinficering og alt for dig? ERIC Ouyang: Ja. Så da vi så tidligere, da vi input kolon kolon få, der sanitates enhver SQL injektioner og whatnot at vi måske ønsker at udføre, hvis vi er en ondsindet bruger af hjemmesiden. Så Laravel håndterer en masse af, at der bag kulisserne. Godt spørgsmål. Så lad os tage et kig på hjemmesiden. Så hvis vi først gå tilbage til controller til startsiden, du vil opdage, at det gør ikke meget her. Du vil opdage, at vi ikke er passerer ind i denne controller noget særligt nyttigt. Det er netop dette indeks fil. Så lad os gå ind i denne noget nyttigt. Og specielt er vi kommer til at passere i indlæg. Og Laravel giver os at gøre stillingen alle, hvilket vil give os mulighed for at få alle de stillinger. Nu, hvis vi går tilbage til index.php, vil du se, hey. Intet her endnu. Men hvad vi ønsker at gøre her faktisk gennemløber, gøre en foreach løkke over stillinger, giver os mulighed for at udskrive stillingerne. Så foreach stillinger som indlæg, hvad vi ønsker at gøre er udskrive indholdet af blog-indlæg. Men én ting du vil bemærke, er, at vi faktisk skrev det meste af denne kode allerede i view.blade.php. Så det, vi kommer til at faktisk gøre, er bruge en dejlig nyttig funktion af Blade og faktor denne fælles kode. Så vi går her. Vi vil tage dette indhold lige her, og hvad vi vil gøre er at oprette en ny mappe. Lad os bare kalde det deltoner. Og her, vil vi at skabe en post.blade.php. Så her har vi indregnet den måde som vi ønsker at vise disse stillinger. Og her, hvad vi vil gøre i stedet for faktisk at have direkte at HTML, vi kommer til at bruge dette direktiv kaldet omfatter blog.partials.post. Og hvad vi vil gøre her er passere i stillingen på siden. Så nu, hvis vi går tilbage her, vil vi bemærke, at funktionaliteten er stadig det samme. Men nu har vi dette indregnes ud kode denne HTML. Så vi kan bruge det i indekset. Så her, det er meget ligetil. Alt vi gør, er omfatte blog.partials.post og array. Og et eller andet sted til før, vi gør stillingen indlæg. Så nu, hvis vi går tilbage til hjemmeside, vil vi se, at, hey. Vi har en liste over alle de blogindlæg, som vi havde før. Vi vil måske tilføje nogle "hvis" betingelser og "andet" betingelser så hvis vi ikke har noget på bloggen, Vi ønsker at vise noget nyttigt. Ligesom, hey. Der er intet indhold endnu på bloggen. Og hvis du fyre faktisk se på fordelingen kode på GitHub, vil du se et eksempel på, hvordan vi gør det. Cool. Eventuelle spørgsmål? Ja. SPEAKER 2: Jeg gætter bare et grundlæggende spørgsmål. Tilbage på ruten. ERIC Ouyang: Ja. Hvis vi tager et kig på ruter. SPEAKER 2: Hvor kommer uses.blogcontroller på oprette indlæg, hvad betyder det direkte os til? ERIC Ouyang: Ja. Ja. SPEAKER 2: Eller hvad er at-- ERIC Ouyang: Så tag et kig, siger for eksempel denne rute lige her. Den første del er den egentlige Webadresse, som brugeren vil gå til. Og dette array her, associative array, definerer hvordan vi ønsker at have den ansøgning reagere på det. Så bruger er controlleren, den funktion, vi vil ringe til, når en bruger går til denne webadresse. Så viewPost lige her var en funktion, definerede vi inde af BlogController-- SPEAKER 2: Jeg kan se. ERIC Ouyang: --so vi kan faktisk gøre en visning, udføre nogle beregninger, interagere med SQL database. SPEAKER 2: OK. ERIC Ouyang: Og så den anden del, "som" er et alias, som vi bruger. Så hvis vi bemærker, når Vi skabte formen, du vil opdage, at URL :: routecreatePost. Så det erstatter i selve URL, så vi er ikke svært kodning disse i så vi kan ændre det én gang, sige, hvis vi ønskede at omdøbe. I stedet for efter skråstreg nye, vi ønsker at gøre ud, p slash ny bare for at rense vore webadresser en smule. Vi vil ændre det i én stedet snarere end på tværs af alle de forskellige filer. Cool. Det er godt. Så nu har vi en meget grundlæggende blog platform. Vi sandsynligvis ønsker at tilføje i en knap så at vi faktisk kan skabe nye stillinger. Så hvis vi tager et kig på Layout Master, Vi har et afsnit kaldet Header Right at vi lige har defineret op i toppen. Så vi kan tilføje knapper til toppen af ​​header. Så hvis vi går til index.blade.php, faktisk gøre, er at definere, hvad der foregår inde i her. Så denne Header højre sektion, hvad vi vil gøre er tilføje en knap for at gå til URL defineret af ruten nyt indlæg. Bare for at rense det op og gøre det temmelig og alle Bootstrap, vi kommer til at gøre dette en standard knap. Lad os bare gøre det store for sjov. Og inde i det, kunne vi sætte noget tekst. Hvad Men Bootstrap giver er glyphicons. Så vi kan faktisk tilføje, at dejligt blyant, som vi så tidligere. Glyphicon. Glyphicon-blyant. Så dette vil give os mulighed for at sætte i et ikon i stedet for tekst. Nu, hvis vi stopper, dette vil definere dette afsnit. Og, hey. Vi har en dejlig knap, der forbinder os direkte til tilføje et blogindlæg side. Så vi har en forholdsvis enkel blog. Vi kan tilføje ting til den. Men hvad vi forventer generelt fra blogs kommenterer. Så det er virkelig vigtigt for os at have, sige, hvis en anden besøger en hjemmeside og virkelig kan lide det indlæg, de kan engagere sig i diskussionen med andre mennesker, der besøger siden. Så vi kommer til at gå og skabe en ny database tabel og en ny model så vi kan knytte kommentarer med indlæg. Så det første skridt, ligesom før, er, at vi er nødt til at køre en migration. Så ligesom før, vi gør php håndværker migrere: gøre. Og vi kommer til at skabe en kaldet create_comments_table. Dette vil skabe en fil som har vores nye migration. Og vi vil, ligesom før, definerer en ny tabel. Så Schema :: skabe en tabel kaldet kommentarer. Denne funktion her. Og inde i denne tabel, hvad vi kommer til at gøre, er først, som før, tildele et ID. Forøger ID. Vi kommer til at give brugerne mulighed for at knytte deres navn med en bestemt kommentar. Vi kommer til at have noget indhold, som går sammen med dette, indhold tekst. Og her, hvad vi kommer til at gøre, er noget andet. Vi kommer til at skabe et heltal der hedder post_id som kommer til at betegne hvilke indlæg en bestemt bemærkning går med. Derudover er vi faktisk kommer til at sætte en fremmed nøgle begrænsning på dette. Så MySQL vil håndhæve det. Vi prøver ikke at tildele kommentar nummer 5 for at skrive 5.000, hvis vi ikke har havde 5.000 stillinger på det. Så det, vi gør her, vi gør udenlandsk post_id vil være forbundet med ID-felt fra tabellen stillinger. Og vi vil faktisk gøre noget ellers hjælpsomme, er onDelete. Så hvis vi slette nogle skrive fra databasen, at vi ønsker at kaskade af sletter for kommentarer også. Fordi det ikke er meget nyttigt for os at have kommentarer til indlæg der ikke eksisterer. Og endelig, ligesom før, men vi er vil sætte tidsstempler på dette. Og som før, vil vi have den omvendte migration være tabe kommentarer bordet. Så nu, hvis vi går tilbage til her, vi vil at køre denne migration, håndværker migrere. Og nu er det anvendt dette migration, som vi lige har oprettet. Så hvis vi et kig på phpMyAdmin, vi gør, i virkeligheden, nu har en kommentarer tabel, der har den struktur, vi lige har angivet. Så ligesom før, vi er vil skabe en ny model at abstrahere SQL tabellen at vi lige har oprettet. Så lad os Tilføj en ny fil. Vi kommer til at kalde det comment.php. Og det er faktisk kommer til at være temmelig ligetil med en lille ændring fra det, vi havde før. Så klasse Kommentar udvider Veltalende. Og hvad vi vil at gøre her er at definere en funktion, der er forhold til andre modeller. Så vi kommer til at have en post-funktion her der returnerer dette forhold. Så vi præcisere, at dette hører at skrive, siger, at der er en stilling at kommentaren tilhører. Dette har faktisk være kapital P for modellen. Og nu lige på den anden flip side, må vi sige, at, hey. Stillinger har kommentarer. Så det, vi kommer til at gøre, er definere offentlig funktion kommentarer. Og her er returneret Dette har mange kommentar. Så nu magisk når vi har en stilling, vi kan få de attribut kommentarer og det vil befolke den med information fra databasen. Så lad os faktisk gå igennem og tilføje en ny funktion til vores opfattelse fil så vi kan både skærm og oprette kommentarer. Så vi kommer til at definere en ny sektion. Lad os bare adskille det med en vandret streg. Afsnit id = "bemærkninger". Hvad vi vil gøre her er, ligesom før, gentage gennem alle kommentarerne. Så faktisk, hvordan vi gør det er, som jeg nævnte, temmelig magisk. Vi gør skrive kommentarer. Og så kan vi gøre det for hver loop over hver af kommentarerne. Og hvad vi vil gøre, er at div class kommentar, og vi vil faktisk udskrive denne kommentar. Så viser det hey, kommentere name-- personen der bogført denne comment-- siger dot dot dot. Vi kommer til at sætte dette i en blok tilbud, bare for at gøre det ser nice. Og så kommentere indhold blok citat. Og foreach. Så nu dette kommer til at sløjfe gennem alle kommentarer der er forbundet med hver af de stillinger og vise hver af disse bemærkninger. Jeg har tænkt mig at tilføje en anden sektion ned her, som giver os mulighed for at tilføje en kommentar. Så h3 klasse. Put en titel her. Tilføj en kommentar. Og vi kommer til at definere en ny form. Så ligesom før, vi er vil gøre formular handling. Og her, den nye aktion er vi vil definere en ny controller, tillader os at reagere for at skrive anmodninger om at oprette kommentarer. Så URL :: rute createComment. Jeg har tænkt mig at passere i parameter her. ID af indlæg, Vi skaber kommentere. Og derefter fremgangsmåden ifølge denne formular bliver indlæg. Nu skal vi til at tilføje i en to felter, formular gruppe. Dette vil være et input med name "navn" og class = "formular-kontrol", type = "text", og med den pladsholder = "Dit navn". Vi vil også definere en anden form felt, som kommer til at være en tekst området, som vi havde før. Ligesom før, kalder det indhold. Class = "formular-kontrol." Pladsholder = "Skriv her." Og bare så vi kan faktisk sende det, indsende type og class = "btn btn-primære." Luk formularen. Luk denne handling. Så nu, hvis vi opdatere denne side, hvor vi har, siger, en bestemt stilling. Vi er nødt til at genstarte serveren. PHP håndværker tjene. Genstart dette. Vi er nødt til at definere ruten. Men for nu, lad os bare tage dette ud, så vi rent faktisk kan vise dig hvad siden ser ud, og derefter vi vil faktisk lave denne rute. Så, hey. Vi har denne nye form hernede så vi kan oprette kommentarer. Så lad os faktisk definere en funktion i regulatoren så vi kan tilføje kommentarer. Lad os gå tilbage. Og inden blogcontroller.php, hvad vi vil gøre er at oprette en ny funktion kaldet oprette kommentarer. Offentlig funktion createComment. Dette vil have en enkelt parameter, ID af de stillinger at vi kommentere. Og som før, vi er vil først få stillingen. Så skrive, findOrfail id. Bagefter vil vi at oprette en ny kommentar. Så kommentere = ny kommentar. Kommentar name = Input :: få navn. Kommentar content = den samme nye linje i pauser af Input :: få indhold. Og endelig vil vi nødt til at knytte denne kommentar med posten. Så vi kommer til at bruge denne funktion, kommentarer, der giver os mulighed for at spare dette forhold. Så nu denne kommentar vil have automatisk stillingen id. Vi kunne også sætte det manuelt, men dette er mere let som langt at læse som funktionen går. Og efter vi udfører dette, hvad vi ønsker at gøre er omdirigere brugeren til rute angivet af viewPost med arrayet med parameter af post-id. Og nu, så det rent faktisk funktioner, er vi nødt til at definere denne rute. Rute :: indlæg. Og nu vil vi kalde denne stolpe skråstreg ID skråstreg kommentar. Array anvender den nye funktion at vi lige har oprettet. BlogController. CreateComment som createComment. Store. Så nu forhåbentlig, hvis vi opdatere denne side og tilføje en kommentar, siger, David Malan. "Forhåbentlig det virker." Send. Vi har i virkeligheden har en kommentere dette blog-indlæg. Cool. Så nu har vi en temmelig funktionel blog-indlæg. Vi er lige at gå til tilføje et par tweaks, så at vi har nogle mere nyttige oplysninger om disse stillinger. Så hvis vi går tilbage til forside, har vi ingen mening af, hvor mange kommentarer er på hver af disse stillinger. Så det, vi er faktisk i gang at gøre er, inde i vores model, definere en hjælpefunktion, der tillader os til at angive antallet af kommentarer at gå med en bestemt stilling. Så vi kommer til at skabe en hjælpefunktion. Offentlig funktion. GetNumCommentsStr. Så en streng, der angiver antallet bemærkninger, der går langs med den. Og hvad vi vil gøre, er at sige at num = Dette kommentarer tælle. Så vi kommer til at tælle antallet af kommentarer. Og hvis dette tal er lig med 1, er vi bare at returnere 1 kommentar. Og så ellers ønsker vi at vende tilbage sammenkædningen af ​​num og kommentarer, så vi får pluralisering korrekte. Bare gøre dette ét tilbud. En kommentar. Og nu kan vi bruge denne funktion direkte inde i vores opfattelse. Så hvis vi går tilbage til delvise stillinger, vi skabte, nu vil vi faktisk vise antallet af kommentarer. Så det, vi kan gøre, er indlæg, bruge denne funktion at vi lige har oprettet til vise antallet af kommentarer. Så hvis vi nu opdatere, det gør i virkeligheden, display de numeriske kommentarer at gå med til det. Hvis vi ønskede at være smarte, hvis du faktisk ser på fordelingen kode, Vi kan faktisk forbinde dette til kommentarerne. Hvis du husker, vi defineret inden for se, at det har punkt ID kommentarer. Så hvis vi faktisk ønskede at linke direkte til bemærkningerne afsnit, hvad vi ville gøre her er en href URL af ruten viewPost. Pass i array-id af post-id. Og så vi ønsker at gå til specifikt kommentarfeltet. Her lad os lukke et mærke. Så nu, hvis vi opdatere denne side, klikker vi på dette. Vi vil gå direkte til kommentarfeltet. Hvis vi havde en længere post, kan du faktisk se denne bounce ned. Men du vil opdage, at det er ikke på toppen af ​​siden. Cool. Store. Så det er en forholdsvis ligetil eksempel på noget simpelt at du kan gøre med Laravel. Men du kan mærke her, at vi har gjort en masse ting med forholdsvis lille mængde kode. Laravel giver os mulighed for at gøre det SQL-forespørgsler bag kulisserne. Det gør det sanitet for os bag kulisserne. Giver os mulighed for at gøre disse relationer meget let uden at vi behøver at gøre enhver SQL slutte udtalelser til kombinere kommentarer med hvad stolperne. Giver os mulighed for at gøre dette arv af skabeloner så vi kan definere disse nesting filer, så vi ikke gentage os selv, ligesom når vi havde at visning af blogindlæg at vi ikke behøver at kopiere og indsætte koden. Og herfra kan du bygge stadig mere komplicerede applikationer. Du kan forestille dig, hvis vi ønskede at gennemføre log-in, vi kunne sige, bringe en tredjemand ramme, der giver os mulighed for at gøre det. Der er en masse af dem der er virkelig, virkelig stor, der kan gøre ligesom, password opsving. Og det sender dig en nulstille kodeord email. Vi kan implementere tilladelse så jeg kan oprette et indlæg, men en anden kan ikke redigere det. Vi kan gennemføre funktionalitet til at slette indlæg. Men du kan se her, at vi har temmelig set alle de rudimentære elementer at bygge nogle virkelig, virkelig, dynamiske og spændende web apps. Så med det, jeg tror, ​​vi er gode. Har du fyre har spørgsmål? Ja? SPEAKER 3: Hvad synes du få statisk indhold? ERIC Ouyang: Statisk indhold. Så du så før, at når vi havde Denne ret her, dette layout indhold, vis make, vi havde denne uden dette array bagefter. Blog.index, vi havde denne som blot en statisk fil. Så hvis vi ikke kan passere noget sammen til det, det vil bare gøre HTML direkte. Men hvis vi går i denne associative vifte af stillinger, der er dynamisk trukket fra databasen, vi kan gøre siden dynamisk. Cool. Andre spørgsmål? SPEAKER 3: Hvordan vil du sammenligne Laravel til måske nogle andre muligheder? ERIC Ouyang: Sure. Ja. Så Laravel is-- det er en stor question-- en af ​​mange muligheder for web rammer. Så Ruby on Rails er en, der er populære. Jeg tror Twitter plejede at være implementeres med Ruby on Rails. Jeg tror, ​​de har siden skiftet. Der er en anden der hedder FuelPHP. Så Ruby on Rails bruger Ruby sprog og gennemfører en masse af MVC ting som vi ser her. FuelPHP er en anden PHP rammer. Django er en af ​​mine favoritter. Det er en web rammer for Python. Så du kan skrive din web app i Python. Så der er et ton af disse muligheder. Laravel, tror jeg, ved og stor er min favorit ret nu for PHP, bare fordi af komponenterne at vi talte om tidligere. Det s Komponist aktiveret. Det omfatter en virkelig, virkelig udtryksfulde ORM system. Har også en virkelig fantastisk templating sprog, nogle af de andre bare ikke give. Og migrationer. Migrations er awesome samt. Cool? Awesome. Nå, tak så meget for ser dette seminar, og held og lykke på din endelige projekter.