[MUSIC SPILLE] ERIC Ouyang: Hei, alle sammen. Velkommen. Dette er Building Dynamic Web-apper med Laravel. Mitt navn er Eric Ouyang. Jeg er en sophomore studerer samfunnsfag med en sekundær i informatikk, og jeg bor i Adams Huset her ved Harvard. Så Laravel, på sitt mest kjerne, er en MVC web app rammeverk. Så liker det dere har gjort med CS50 Finance, Laravel er et rammeverk som gjør det mulig deg å bygge dynamiske web apps. Så du kan tenke på det i noen sanser som en forlengelse av den type ting du har gjort i CS50 Økonomi, men et system som er mye mer robust, mye mer elegant i noen sanser, og gir en masse funksjonalitet for deg å bygge ganske kompleks webapplikasjoner. Så la oss gå gjennom noen av de viktigste funksjonene, og så skal vi dykke inn i en eksempel på å bygge en blogg søknad med Laravel. Så en av de første tingene som skiller den fra MVC type arbeid at du har gjort med CS50 er det inkluderer en ORM motor. Så ORM står for objekt relasjonelle kartlegging. Så dette gjør at du kan bygge et lag av abstraksjon mellom databasen og dine kontrollerne. Så i motsetning til i CS50 Finance der du direkte lage spørringer, ORM lag lar deg abstrakt det bort og skape modeller som er kraftigere enn kan du direkte med SQL-spørringer. En annen ting som er virkelig nyttig er arve maler. Så du vil legge merke til i CS50 Finans, du ender opp med å skrive om en masse ting, hvor plasserer du kan potensielt gjenbruke ting, er du ikke i stand til. Så her i Laravel, kan du bruke hva som er kjent som bladet mal motoren for å skape en hovedoppsett. Og derfra kan du arve slik at sub-maler kan faktisk inkluderer elementer innen at større base mal. Migrasjon. Så dette er en ganske standard på de fleste moderne webapplikasjon rammeverk. Så dette gjør at du kan representere database skjema endringer i koden. Så uten kommer til å si, phpMyAdmin, du kan faktisk lage disse vandringene hvor du representerer database schema endringer i koden direkte. Og dette kan du to-- spesielt hvis du har flere personer som arbeider på samme web application-- spore disse endringene, si i GitHub, eller noen andre depotet. Så dette er virkelig nyttig og demper behovet til, si, passerer rundt en masse SQL dumper. Og til slutt, er Komponist noe virkelig, virkelig nyttig som lar deg bruke andre folks koden for å gjøre utrolige ting. Så Laravel er strukturert som flere komponistens pakker. Så si at hvis du ønsket å bringe i en godkjenningspakke eller hvis du ønsket å få inn litt slags generator script eller en admin grensesnitt, kan du plug and play disse komponentene med komponist. Så la oss komme i gang. Eventuelle spørsmål fra deg gutta før vi kommer i gang? Ingen spørsmål? Cool. Så det første trinnet er installere Composer. Så Oser lar deg administrere disse avhengigheter, enten det er den Laravel rammeverk eller en annen tredjepart forlengelse. Den første kommandoen tillater du laste ned Komponist, og den andre kommandoen lar deg flytte den til din lokale bin mappen slik at du kan kjøre Komponist direkte gjennom terminalen. Etter det, gå videre og opprette en ny Laravel prosjekt. Vi blir faktisk kommer til bruke noen eksempelkode at jeg har satt sammen å lage denne bloggen. Men hvis du starter fra scratch, ville du bruke denne kommandoen opp her, komponist lage-prosjekt, laravel slash laravel, og deretter navnet på prosjektet. Og som vil omfatte alle fordelingskode for å starte en ny Laravel prosjekt. Så for dine CS50 endelige prosjekter, vil du sannsynligvis vil bruke den kommandoen. Men vi kommer til å begynne med dette. Så når du har gjort at du kommer til å få en ganske omfattende nummer av filer i blog50. Så la oss bare gå gjennom noen av disse komponentene. Du vil merke på denne ruten katalog, det er en app mappe. Inne i app-mappen, er det et par nyttige mapper. Av notatet til å begynne med er dette config mappen. Så dette setter opp hvordan din webapplikasjon er kommer til å si, autentisere folk eller kontant ting eller koble til databasen. Og hva er egentlig nyttig er at Laravel lar deg sette opp ulike utviklingsmiljøer. Så det vi har gjort her er hvis vi går under lokal mappe, det er en database.php fil. Og du vil legge merke til her at vi sette opp en MySQL-tilkobling som lar enkeltpersoner til å koble til MySQL-serveren som er direkte på CS50 apparatet. Og vi skal koble til en database at jeg satt opp kalt Blog50. Så la oss faktisk gå videre og drevet arbeids versjon av denne, bare for å få en følelse av hva applikasjon som vi bygger ser ut. Så jeg har en kopi av dette Blog50 fullført. Så Laravel faktisk har innebygget en server at du kan kjøre direkte fra kommandolinjen. Så dette er lik den PSet før når du faktisk bygge din egen server i C. Så de har en innebygd slik at du kan kjøre dine Laravel apps direkte fra kommandolinjen. Så hvis vi gjør php håndverker tjene, dette vil lansere en utviklingsserver på port 8000. Så hvis vi går til lokale verten 8000, vil du legge merke til at, hei. Vi har vår blogg oppe og går. Så Laravel her genererer forsiden av vår blogg. Veldig enkelt program. Men det er et par virkelig fiffige funksjoner at det gir under panseret. Så bloggen programmets ukomplisert. Hvis vi ønsket å lage et innlegg, vi kan klikke på den knappen. Vi kan si: "Hei, alle sammen. Dette er en veldig morsom seminar, "for eksempel. Og skrive noe ned her. Tekst her. Hvis vi klikker Send, vil du legge merke til at vår nye blogg innlegget har blitt lagt til forsiden av bloggen. Hvis vi går tilbake hit, vil du legge merke til at det har vært noen kommentarer allerede på bloggen. Så hvis vi bla nedover, vil du legge merke til at Jonathan Tan sier at han ble veldig fascinert av dette innlegget. Så vi vil gå inn på hvordan objekt relasjonelle kartlegging tillater du skal gjøre disse relasjonene i en forholdsvis sømløs måte også. Cool. Eventuelle spørsmål om funksjonalitet av hva vi kommer til å bygge? Cool. Så la oss starte med faktisk skape databasetabellene. Så husker at i CS50 Finance, du sette sammen et bord for brukerne så vel som for aksjer i din portefølje. Slik som vi har nevnt tidligere, hva vi bruker i Laravel er noe kjent som vandringer. Så hvis vi går tilbake til den distribusjon kode her, den første kommandoen som er nyttig at Laravel gir deg er dette migrate kommandoen. Slik at vi kan gjøre php håndtverker migrere: gjøre. Så dette tillater oss å lage en migrasjon. Og så får vi ønsker for å lage en migrering kalt create_posts_table, som kommer å være der vi skal være lagring av våre blogginnlegg. Og du vil legge merke til her at det kjører gjennom noen kode som faktisk genererer en fil med et tidsstempel på det. Så hvis vi gå og se på Database, vi vil legge merke til i henhold Migrations at det er opprettet en blank fil for oss som har standardkode med navnet at vi spesifisert, lage innlegg tabellen. Og det har to funksjoner i den. Up er hva vi ønsker å kjøre når den migrasjon påføres databasen. Og ned er hva vi skal gjøre når vi ønsker å reversere en migrering. Så her la oss starte ut med å skrive denne migrasjonen. Så det er en nyttig klasse i Laravel kalt Schema. Så vi kommer til å kjøre Schema :: skape. Og vi kommer til å skape en tabell kalt innlegg. Og her bruker vi dette ved hjelp av en funksjon. Og innenfor her, skal vi faktisk spesifisere innholdet av bordet vårt. Vi kommer til å lage et ID, som er automatisk øke. I tillegg skal vi å opprette et felt som representerer tittelen på blogginnlegget. Vi kommer også til å skape et felt for lagring av teksten i blogginnlegget. Og til slutt, skal vi å lagre noen tidsstempler for når vår innlegget ble opprettet og når den ble oppdatert. Og for ned, er det ganske enkelt. Alt vi ønsker å gjøre er å slippe tabellen som vi har laget. Stor. Eventuelle spørsmål? Så nå hvis vi går videre og-- faktisk, lokale verten, la meg slette det vi hadde tidligere. Gå til databaser. Jeg kommer til å slette det vi hadde tidligere. Slippe dette og skape en ny database Blog50. Så nå hva den magiske del er her at vi kan søke disse vandringene direkte til databasen ved å bruke kommandolinje verktøyet. Så hvis vi gjør php håndverker migrate, vil du legge merke til at, hei. Det er opprettet migrasjon bordet, som vi vil ta en titt på i en bit, og det er brukt denne første migrasjon. Så vi ser på Blog50, vil du merke at det er opprettet to tabeller for oss. Første er dette vandringer tabellen. Så hvis vi bla dette, vil du legge merke til at denne tabellen er ganske grei. Det er bare sagt at, hei. Vi har brukt denne migrasjonen. Vi går tilbake og ser på innleggene. Du vil merke at strukturen er akkurat det vi hadde bedt om det. Vi har en automatisk øke ID. Vi har en streng for å lagre tittelen, og et tekstfelt for lagring av innhold. Stor. Cool. Eventuelle spørsmål om vandringer arbeid, hvordan vi kan bruke dem? Nei? Cool. Så nå skal vi gå videre og faktisk lage modellen. Så vi ønsker å skape et innlegg modell som lagrer en abstraksjon av databasen. Så heller enn å gjøre MySQL-spørringer direkte, skal vi skape. Så vi må skape en mappe i her kalt modeller. Og inni her, skal vi opprette en fil som heter post.php. Inne i denne PHP-filen, vi kommer til å skape en A-post som strekker veltalende. Veltalende er navnet på ORM motor som Laravel gir. Og her kan vi forvente at du faktisk trenger å skrive noen kode. Vi kommer til å skrive noen hjelpefunksjoner senere. Men ut av boksen, vil dette allerede gjenkjenne hva som er i databasen og vi kan få tilgang til, si, teksten av blogginnlegget eller tittelen, og skape ting direkte med stort sett ingen kode hodet. Så det er en av de magiske komponenter. Og vind når denne klassen er mer fullverdig, vi vil inneholde informasjon om hva det er relatert til, så kommentarene. Også lage en funksjon slik at vi faktisk kan direkte få nettadressen av et blogginnlegg siden. Cool. Eventuelle spørsmål om det? Nei. Cool. Så nå når vi har vår modell, vi ønsker å lage en kontroller som er stand til å samhandle med disse modellene, og deretter databasen. Så hvis vi tar en titt på BlogController, vil du merke til at det ikke er mye her akkurat nå. Alt er det er en indeks funksjon som genererer hjemmesiden, men uten noe det å vise enda. Så den første funksjonen at vi kommer til å skape er en som lar oss å lage et blogginnlegg. Så vi kommer til å erklære en ny funksjon kalt newPost. Og inne her rett og slett, vi skal for å stille inn utseendet på denne siden å være en render versjon hvis du husker fra CS50, av denne malen kalles blog.new, som vi kommer til å lage i en liten bit. Du vil legge merke til her på linje seks som vi spesifisert denne variabelen, layout. Og hvis vi tar en titt på Visninger-mappen, det er en utforminger mappe, som inkluderer en svært grunnleggende HTML-fil. Og av notatet, vil du legge merke at vi har denne beholderen her som gir innhold. Så innsiden av vår mal hva vi skal gjøre er å lage hva som kommer til å være erstattes direkte i dette oppsettet. Så sa vi at vi ønsker å gjengi en mal som heter blog.new. Men innsiden av bloggen, det er ennå ikke denne nye malen. Så vi kommer til å skape en fil som heter new.blade.php. Dette forteller Laravel som denne PHP-filen bør gjengis med blad mal motor. Så dette er en nokså grei fil. Det kommer til å være den formen som vi faktisk legge inn et blogginnlegg. Så den magiske her fra arv er at, hei. Vi ønsker å presisere at seksjon, innholdet seksjon her, som er avgrenset vedsection ogstop. Så hva er i mellom her kommer til å være substituert i hoved layout. Og her er hva vi ønsker å gjøre er veldig enkelt opprette en ny HTML-fil. La oss bare legge en rask tittel. Legg et blogginnlegg. Og i det, er vi kommer til å lage et skjema. Dette skjemaet skal ha en handling. Og dette kommer til å være noe at vi erstatte senere, og vi får se hvordan ruting passer inn her. Men vi er bare nødt til å definere for nå at dette går til en URL med ruten fra createPost. Og så dette kommer å ha metode innlegg. Innenfor her, vi skal å ha to felt. Div class = "form-gruppe". Vi bruker den Bootstrap CSS bibliotek graciously levert av Twitter. Så vi kommer til å lage to av disse. Så denne første innspill er kommer til å være tittelen. Så innspill name = "title". Class = "formcontrol". Type = "text". Jeg kommer til å legge til en plassholder = "Tittel". Og deretter den andre er kommer til å være et tekstområde. Name = "innhold". Class = "formcontrol". Og plassholder = "Skriv her". Det vi går. Til slutt skal vi legge til en rask send-knappen. Type = "submit" class = "btn btn-primær". Så disse er alle funksjonene i Bootstrap så at dette kan legges ut på en måte som er byttedyr til brukeren, snarere enn naken HTML. Så vi har definert kontrolleren her. Vi har definert en veldig enkel visning. Men hva som mangler er bindevev. Så på dette punktet, Laravel har ingen anelse om hvordan vi kommer til å faktisk tilgang til denne kontrolleren. Så dette er definert i en fil som heter routes.php. Og akkurat nå, har vi en rute. Som er når vi går til hjemmebanen for dette nettstedet, det kommer til å gjengi indeksen kontrolleren. Så her er hva vi trenger gjøre er å implementere en ny rute for oss å lage et innlegg. Så vi bruker denne metoden få, som angir at når en bruker prøver å få dette page-- spesifikt innlegget slash ny page-- hva vi skal gjøre er bruke kontrolleren heter BlogController nytt innlegg. Den som vi nettopp opprettet. Og så skal vi til Alias ​​det som newPost. Vi kommer til å lage en annen funksjon i en liten bit. Men hva er her i henhold nøkkelen "som" er hva vi kan erstatte innen våre Blade maler. Så for nå, la oss faktisk også si rute. Så vi også kommer for å skape en styre slik at vi kan lage disse innleggene. Så hvis en bruker poster til siden innlegget slash ny, hva vi skal gjøre er bruker en kontroller som vi kommer til å lage kort tid kalt BlogController på createPost. Og vi kommer til å alias dette med så createPost. Cool. Eventuelle spørsmål? Cool. Så la oss kjøre det vi har så langt. Så hvis vi gjør php håndverker tjene, vi vil se massevis av feil. Så det ser ut som vi har en syntaksfeil på ruter linje 27. Ah. Mangler et semikolon. Så hvis vi går til 8000, vil du se noe her ennå. Så dette er standard startside. Men hvis vi går å poste slash ny, hei. Det vil være den formen som vi nettopp opprettet. Akkurat nå, ikke har vi implementert funksjonaliteten av når vi trykker på Send-knappen. Så hvis vi klikker på Submit knappen, kommer det til å kjøre en feil. Men vi kommer til å kode som akkurat nå, nettopp hva vi ønsker å gjøre når en bruker sender dette skjemaet. Så la oss gjøre det. Gå tilbake til Controllers fil. Hva vi skal gjøre er implementere denne nye funksjonen som tillater oss å lage et innlegg. Erklære ny funksjon. Offentlig funksjon createPost. Og denne funksjonen kommer til å være en litt mer avansert enn hva vi hadde før. Men du vil se her at vi ikke er kommer til å faktisk skrive noe SQL. ORM, den Eloquent ORM, kommer til å tillate oss å gjøre dette i noen måter en mer elegant måte. Så vi kommer til å lage et nytt innlegg. Og her er vi Instantiating et nytt objekt fra den modellen som vi bare opprettet, innlegget modell. Og hva vi skal gjøre er å sette den Tittelen egenskap av dette ved hjelp av noe som vi får fra serveren. Så dette er likt det vi hadde før i CS50 Finance hvor vi ville gjøre, ved hjelp av Super Globalt Post jakt etter tittelen. Så Laravel gir noen sanitær og whatnot bruke denne hjelperen funksjonen. Så vi foretrekker å bruke dette i stedet av denne svært grunnleggende rå form fra PHP. Og så hva vi skal gjøre er å sette innholdet i det å Input få innhold. Vi blir faktisk kommer til å vikle dette i en nyttig funksjon at PHP gir kalt nl2br, som snur nye linjer, NLS, inn brs, pauser, slik at vi faktisk kan ha forskjellige avsnitt i det. Og til slutt hva vi skal å gjøre er å lagre dette innlegget. Så vi kaller funksjonen lagre på denne modellen. Vi kommer til å spare i stolpen. Og til slutt hva vi skal gjøre er omdirigere brukeren spesifikt til ruten som vi kommer til å lage kort tid, alias av viewPost. Og vi kommer til å passere i argumentene id, som er den id av denne nye innlegg. Stor. Så nå hvis vi faktisk gå og kjøre denne. Vi kommer til å legge til et nytt innlegg. La oss si at dette er seminar 50. Og si sikkert. ADSL. Uansett. En slags innhold. Og sende det. Og vi vil legge merke til det, hei. ruter som ikke er definert. Men hvis vi tar en titt på phpMyAdmin og se etter om ikke vår funksjon gjorde noe. Se på Blog50 innlegg. Vi vil legge merke til at, hei. Faktisk gjorde vi bare lage den bloggen poste med tidsstempler som spesifisert. Så nå la oss gå tilbake og faktisk lage denne annen funksjon i vår controller, spesielt viewPost kontrolleren. Så offentlig funksjon viewPost. Så her er hva vi skal gjøre, i stedet av å ha tomme parenteser, vi vil ønske å passere i ID av innlegget som vi skaper. Og herfra hva vi skal gjøre er faktisk søke i databasen for det. Så hvis vi legger inn, det er en funksjon som heter Finn som tillater oss å spørre på den ved ID. Spesifikt, faktisk, skal vi bruke en alternativ versjon av denne kalt Finn eller Fail, som tillater oss å slutte ut av denne funksjonen, kaste et unntak hvis ID vi passere i ikke eksisterer. Og så skal vi gjøre noe i likhet med hva vi gjorde tidligere hvor vi setter innhold på denne siden for å være det gjengitte versjonen av denne nye utsikt som vi kommer til å skape, blog.view. Og vi kommer til å passere inn it akkurat som i CS50 gjengi function-- en ordbok av variabler. Nøklene til denne assosiativ array bli variabler i malen. Så vi kommer til å gjøre post innlegg. Så pass indirekte innlegget som vi har spørres fra databasen. . Nå hva vi skal gjøre er å lage dette synet slik at vi faktisk kan se blogginnlegg som vi har bygget. Så vi kommer til å skape en fil som heter view.blade.php. Så innsiden av denne malen, hva vi skal gjøre er satt sammen en enkel side som tillater oss å vise innholdet. Så vi gjør delen, er at før innhold. Stoppe. Og hva vi skal å gjøre innen her er skrive litt HTML for å vise denne siden. Så vi kommer til å bryte den med en fancy ny HTML5 element kalt artikkel. Og her skal vi å ha en overskrift der vi skal rett og slett ha en h1, som inkluderer innlegget tittelen. Så her, hvis vi ser på dette dobbel klammeparentes notasjon, dette vil gjøre hovedsak PHP ekko tittelen. Så det er en nyttig stenografi at Laravel gir oss. Så vi kommer til å bruke denne notasjonen i stedet. Og her, skal vi også skrive ut innholdet i den. Og her skal vi å gjøre innholdet i posten. Og ned på bunnen hva vi er kommer til å gjøre er å lage en bunntekst. Og i bunnteksten, skal vi første skjermen når dette ble postet. Så dette ble postet på, opprettet på. Og Laravel bruker en virkelig fin dato bibliotek kalt Carbon. Slik at vi faktisk kan gjøre noe som kalles difforHumans, som du så tidligere. Når vi lagt ut. det vil si, lignende, fem sekunder siden. Så dette er en veldig fin funksjonaliteten Laravel. Og til slutt, skal vi å lukke denne bunntekst. Så nå hvis vi går tilbake til Hjemmeside vi kommer å se noe her ennå fordi vi har ikke kodet opp hjemmesiden. Men hvis vi går å poste slash ett, vi kommer til å se et unntak. Er det noen som vet hvorfor ser vi et unntak? Hva er det vi mangler? Noen ideer? Så hva gjorde vi gjør tidligere for oss faktisk å definere hvordan vi får til spesielle kontrollere? SPEAKER 1: Ruten? ERIC Ouyang: Yeah. Så vi har fortsatt å definere ruten. Så vi går tilbake hit for å routes.php. Du vil merke at vi har faktisk ikke definert hvordan vi kommer til å få til denne kontrolleren. Så nå skal vi definere denne ruten. Det er ganske grei, i likhet med hva vi gjorde tidligere. Men hva vi kommer til å legge merke til her er at vi kommer til å ha en plassholder. Så hvis vi gjør route.get slash post ID. Så ID nå er hva som kommer til føres inn i styringen. Dette kommer til å bruke den kontroller som vi bare opprettet, BlogController på viewPost. Og vi kommer til å alias dette som viewPost. Stor. Så nå vi kommer til å skape denne ruten. Så nå går vi her og oppdatere denne siden, vi faktisk har vår nye blogginnlegg. Så dette er hva vi opprettet tidligere. Veldig enkel side, men viser blogginnlegg som vi nettopp opprettet. Cool. Og hvis vi faktisk gå gjennom hele prosessen med å skape en ny bloggpost, vi vil legge merke til at alt omdirigeringer ordentlig. Hvis jeg sier, "Hei. Jeg er Jonathan Tan. " Si: "Dette er mitt blogginnlegg." Og Send det inn, vil dette skape denne bloggposten med ID 2, hvilke trinn fra hva vi hadde tidligere og viser den riktig. Awesome. Eventuelle spørsmål? Ja? SPEAKER 2: Har Laravel håndtak Opprydding og alt for deg? ERIC Ouyang: Ja. Så når vi så tidligere når vi gjorde innspill kolon kolon få, som sanitates noen SQL injeksjoner og whatnot at vi kanskje ønsker å utføre hvis vi er en ondsinnet bruker av nettstedet. Så Laravel håndterer mye av at bak kulissene. Godt spørsmål. Så la oss ta en titt på hjemmesiden. Så hvis vi først gå tilbake til kontrolleren for hjemmesiden, du vil legge merke til at det gjør ikke mye her. Du vil merke at vi ikke er passerer inn i denne kontrolleren noe spesielt nyttig. Det er bare denne indeksfilen. Så la oss gå over i dette noe nyttig. Og spesielt er vi kommer til å passere i innlegg. Og Laravel tillater oss for å gjøre innlegget tatt, som vil tillate oss å få alle innleggene. Nå hvis vi går tilbake til index.php, vil du se, hei. Ingenting her ennå. Men hva vi ønsker å gjøre her er faktisk iterere gjennom, gjøre en foreach løkke over innleggene som tillater oss å skrive ut innleggene. Så foreach innlegg som post, hva vi ønsker å gjøre er skrive ut innholdet av blogginnlegget. Men en ting du vil legge merke til er at vi faktisk skrev det meste av den koden allerede, i view.blade.php. Så hva skal vi egentlig gjøre er bruke en fin nyttig funksjon av Blade og faktor ut denne felles kode. Så vi går her. Vi kommer til å ta dette innholdet akkurat her, og hva vi skal gjøre er å opprette en ny mappe. La oss bare kalle det partials. Og her skal vi å skape en post.blade.php. Så her, priset vi ut på veien i som vi ønsker å vise disse innleggene. Og her er hva vi skal gjøre i stedet for faktisk å ha som HTML direkte, vi kommer til å bruke dette direktivet kalt inkluderer blog.partials.post. Og hva vi skal gjøre her er pass i posten på siden. Så nå går vi tilbake her, vil vi legge merke til at funksjonaliteten er fortsatt den samme. Men nå har vi dette priset ut kode, denne HTML. Slik at vi kan bruke det i Index. Så her, dette er veldig grei. Alt vi gjør er å inkludere blog.partials.post og array. Og et sted å før, gjør vi etter post. Så nå går vi tilbake til hjemmesiden, vil vi se at, hei. Vi har en liste over alle blogginnlegg som vi hadde før. Vi ønsker kanskje å legge til noen "hvis" forhold og "ellers" betingelser slik at hvis vi ikke har noe på bloggen, vi ønsker å vise noe nyttig. Liker, hei. Det er ikke noe innhold ennå på bloggen. Og hvis dere faktisk se på fordelingen koden på GitHub, du vil se et eksempel på hvordan vi gjør det. Cool. Eventuelle spørsmål? Ja. SPEAKER 2: Jeg tror bare et grunnleggende spørsmål. Tilbake på ruten. ERIC Ouyang: Yeah. Hvis vi tar en titt på ruter. SPEAKER 2: Hvor kommer uses.blogcontroller på lage innlegg, hva betyr det å lede oss til? ERIC Ouyang: Yeah. Yeah. SPEAKER 2: Eller hva er at-- ERIC Ouyang: Så, ta en titt, sier for eksempel denne ruten til høyre her. Den første delen er selve Nettadressen som brukeren vil gå til. Og denne matrisen her, assosiativ array, definerer hvordan vi ønsker å ha det søknad handling som svar på det. Så bruker er kontrolleren, den funksjon som vi ønsker å ringe når en brukeren går til denne nettadressen. Så viewPost akkurat her var en funksjon som vi definerte inne av BlogController-- SPEAKER 2: Jeg skjønner. ERIC Ouyang: --so at vi faktisk kan gjengi en visning, utføre noen beregninger, samhandle med SQL database. SPEAKER 2: OK. ERIC Ouyang: Og så den andre del, "som" er et alias som vi bruker. Så hvis vi legger merke til når vi laget skjemaet, du vil legge merke til at URL :: routecreatePost. Så det erstatter i den faktiske URL, slik at vi er ikke vanskelig koding disse i så vi kan endre det gang, sier hvis vi ønsket å endre navn. I stedet for å etter slash ny, ønsker vi å gjøre som, p slash nytt bare for å rense opp våre webadresser litt. Vi vil endre det på ett sted heller enn på tvers av alle de forskjellige filer. Cool. Det er bra. Så nå har vi en veldig grunnleggende bloggplattform. Vi sannsynligvis vil legge i en knapp så at vi faktisk kan lage nye innlegg. Så hvis vi tar en titt på Layout Master, vi har en seksjon som heter Header Høyre at vi nettopp har definert opp på toppen. Slik at vi kan legge til knapper til toppen av spissen. Så hvis vi går til index.blade.php, faktisk gjøre er å definere hva som foregår på innsiden av her. Så dette Header Høyre delen, hva vi skal gjøre er å legge inn en knapp for å gå til URL definert av ruten nytt innlegg. Bare for å rydde opp og gjøre det pen og alt Bootstrap, vi kommer til å gjøre dette en standardknapp. La oss bare gjøre det stort for moro skyld. Og inni den, kan vi sette noen tekst. Men hva Bootstrap gir er glyphicons. Så vi kan faktisk legge inn at fin blyant som vi så tidligere. Glyphicon. Glyphicon-blyant. Så dette vil gi oss mulighet til å sette i et ikon i stedet for tekst. Nå hvis vi stopper, dette vil definere denne delen. Og, hei. Vi har en fin knapp som linker oss direkte til legge til et blogginnlegg siden. Så vi har en ganske enkel blogg. Vi kan legge ting til det. Men hva vi vanligvis forventer fra blogger kommenterer. Så det er veldig viktig for oss å ha, si, hvis noen andre besøker et nettsted og virkelig liker innlegget som de kan engasjere seg i diskusjonen med andre mennesker som besøker siden. Så vi kommer til å gå og lage en ny databasetabell og en ny modell slik at vi kan knytte kommentarer med innlegg. Så det første trinnet, akkurat som før, er at vi trenger å kjøre en migrasjon. Slik som før, gjør vi php håndtverker migrere: gjøre. Og vi kommer til å skape en kalt create_comments_table. Dette vil skape en fil som har vår nye migrasjon. Og vi kommer til, som før, definere en ny tabell. Så Schema :: skape en tabell kalt kommentarer. Denne funksjonen her. Og inne i denne tabellen hva vi kommer til å gjøre er å først, som før, tildele en ID. Intervaller ID. Vi kommer til å tillate brukere å knytte sitt navn med en spesiell kommentar. Vi kommer til å ha noe innhold som går sammen med dette, tekstinnhold. Og her er hva vi kommer til å gjøre er noe annerledes. Vi kommer til å skape et heltall Det kalles post_id som kommer til å betegne hva innlegget en spesiell kommentar går med. I tillegg er vi faktisk kommer til å satt en fremmednøkkelbegrensning på dette. Så MySQL vil håndheve det. Vi prøver ikke å tildele kommentar nummer 5 å poste 5000 hvis vi ikke har hadde 5000 innlegg på det. Så det vi gjør her, vi gjør utenlandske post_id kommer til å være forbundet med ID-feltet fra tabell innlegg. Og vi vil faktisk gjøre noe annet nyttig, er onDelete. Så hvis vi slette noen poste fra databasen, at vi ønsker å cascade den sletter for kommentarer også. Fordi det er ikke veldig nyttig for oss å ha kommentarer på innlegg som ikke eksisterer. Og til slutt, som før, vi er kommer til å sette tidsstempler på dette. Og som før, skal vi ha motsatt migrasjon være slippe kommentarer tabellen. Så nå går vi tilbake til her, vi skal å kjøre denne migrasjon, håndverker migrere. Og nå er det brukt dette migrasjon som vi nettopp opprettet. Så hvis vi en titt på phpMyAdmin, vi gjør, faktisk, nå har et kommentarer tabell som har den struktur som vi nettopp har angitt. Slik som før, vi er kommer til å lage en ny modell til abstrakt SQL tabellen at vi nettopp opprettet. Så la oss Legg til en ny fil. Vi kommer til å kalle det comment.php. Og dette er faktisk kommer til å være ganske greit med en liten endring fra hva vi hadde før. Så klasse Kommentar strekker Eloquent. Og hva vi skal å gjøre her er å definere en funksjon som er den forhold til andre modeller. Så vi kommer til å ha et innlegg funksjon her som returnerer dette forholdet. Så vi spesifisere at dette tilhører poste, sier at det er ett innlegg at denne kommentaren tilhører. Dette har faktisk å være kapital P for modellen. Og nå bare på den andre flip side, må vi si at, hei. Innlegg har kommentarer. Så hva vi skal gjøre er definere offentlige funksjons kommentarer. Og her blir returnert dette har mange kommentar. Så nå magisk når vi har et innlegg, vi kan få attributt kommentarer og det vil fylle den med informasjon fra databasen. Så la oss faktisk gå gjennom og legge til en ny funksjon i vårt syn fil slik at vi kan både skjerm og lage kommentarer. Så vi kommer til å definere en ny seksjon. La oss bare skille det med en horisontal linje. Seksjon id = "kommentarer". Hva vi kommer til å gjøre her er, som før, iterere gjennom alle kommentarene. Så egentlig hvordan vi gjør dette er, som jeg nevnte, ganske magisk. Vi gjør skrive kommentarer. Og så kan vi gjøre dette for hver løkke over hver av kommentarene. Og hva vi kommer til å gjøre er div class kommentar, og vi kommer til å faktisk skrive ut denne kommentaren. Så vise at hei, kommentere name-- personen som postet denne comment-- sier dot dot dot. Vi kommer til å sette dette i en blokk sitat, bare for å gjøre det ser fint. Og deretter kommentere innhold blokksitat. Og foreach. Så nå dette kommer til å sløyfe gjennom alle kommentarene som er forbundet med hver av innleggene og vise hver av disse kommentarene. Jeg kommer til å legge til en annen del ned her, som tillater oss å legge til en kommentar. Så h3 class. Sette en tittel her. Legge til en kommentar. Og vi kommer til å definere en ny form. Slik som før, vi er kommer til å gjøre form action. Og her er den nye handlingen vi er kommer til å definere en ny kontroller som tillater oss å svare på innlegg forespørsler om å lage kommentarer. Så URL :: rute createComment. Jeg kommer til å passere i parameter her. IDen til innlegget som vi skaper kommentar på. Og deretter ble fremgangsmåten ifølge denne skjemaet skal være innlegg. Nå kommer vi til å legge inn en to feltene, form gruppe. Dette kommer til å være en inngang med nevne "navn" og class = "form-kontroll", type = "text", og med den plassholder = "Ditt navn". Vi kommer også til å definere annen form feltet, som kommer til å være en tekst område som vi hadde før. Akkurat som før, kall det innhold. Class = "form-kontroll." Plassholder = "Skriv her." Og bare slik at vi faktisk kan sende den, sende inn type og class = "btn btn-primære." Lukke skjemaet. Lukke denne handlingen. Så nå hvis vi oppdatere denne siden hvor vi har, sier en bestemt stilling. Vi må starte serveren. PHP håndverker tjene. Reboot dette. Vi må definere ruten. Men for nå, la oss bare ta dette ut, slik at vi faktisk kan vise deg hva siden ser ut, og deretter vi vil faktisk lage den ruten. Så, hei. Vi har denne nye formen ned her slik at vi kan lage kommentarer. Så la oss faktisk definere et funksjon innenfor styringen slik at vi kan legge til kommentarer. La oss gå tilbake. Og innen blogcontroller.php, hva vi skal gjøre er å lage en ny funksjon kalt skape kommentar. Offentlig funksjon createComment. Dette kommer til å ha et enkelt parameter er ID av innleggene at vi kommenterer. Og som før, vi er kommer til å først få innlegg. Så poste, findOrfail id. Etterpå skal vi for å skape en ny kommentar. Så kommentere = ny kommentar. Kommentar name = Input :: få navn. Kommentar content = samme ny linje inn pauser på Input :: få innhold. Og til slutt, vi er nødt til å knytte denne kommentaren med innlegget. Så vi kommer til å bruke denne funksjonen, kommentarer, som tillater oss å spare dette forholdet. Så nå denne kommentaren vil ha automatisk etter ID. Vi kunne også sette den manuelt, er men dette mer lett å lese så langt som funksjon går. Og etter at vi utfører dette, hva vi ønsker å gjøre er omdirigere brukeren til rute spesifisert av viewPost med array med parameter av innlegget ID. Og nå, slik at dette faktisk funksjoner, må vi definere denne ruten. Ruten :: innlegg. Og nå skal vi kalle dette post slash ID slash kommentar. Array bruker den nye funksjonen at vi nettopp opprettet. BlogController. CreateComment som createComment. Stor. Så nå forhåpentligvis hvis vi oppdatere denne siden og legge inn en kommentar, sier David Malan. "Forhåpentligvis dette fungerer." Send. Vi gjør, faktisk, har en kommentere dette blogginnlegget. Cool. Så nå har vi en nokså funksjonell blogginnlegg. Vi er bare nødt til å legge til et par tweaks så at vi har litt mer nyttig informasjon om disse innleggene. Så hvis vi går tilbake til den forside, har vi ingen mening hvor mange kommentarer er på hver av disse innleggene. Så det vi blir faktisk kommer å gjøre er, inne i vår modell, definere en hjelpefunksjon som gjør det mulig oss til å angi antall kommentarer som går med en bestemt stilling. Så vi kommer til å skape en hjelper funksjon. Offentlig funksjon. GetNumCommentsStr. Så en streng som angir antall kommentarer som går langs med den. Og hva vi skal gjøre er å si at num = dette kommentarer telle. Så vi kommer til å telle antall kommentarer. Og dersom dette tallet er lik 1, er vi bare kommer til å returnere en kommentar. Og så ellers, ønsker vi å komme tilbake sammenkjedingen av num og kommentarer, så vi får pluralization riktig. Bare gjøre dette en enkelt tilbud. En kommentar. Og nå kan vi bruke denne funksjonen direkte inne fra vårt syn. Så hvis vi går tilbake til den delvis innlegg som vi har opprettet, Nå ønsker vi å faktisk vise antall kommentarer. Så det vi kan gjøre er post, bruke denne funksjonen at vi nettopp opprettet for å vise antall kommentarer. Så hvis vi nå oppdatere, det gjør i virkeligheten skjerm tall kommentarer som går sammen med det. Hvis vi ønsket å være fancy hvis du faktisk se på fordelingen kode, vi kan faktisk koble dette til kommentarene. Hvis du husker, vi definert innenfor se at dette har seksjonen ID kommentarer. Så hvis vi faktisk ønsket å knytte direkte til kommentarfeltet, hva vi vil gjøre her er a href URL til ruten viewPost. Passere i matrisen ID av post-ID. Og da vi ønsker å gå til spesifikt kommentarfeltet. Her la oss lukke En kode. Så nå hvis vi oppdatere denne side, klikker vi på dette. Vi vil gå direkte til kommentarfeltet. Hvis vi hadde et lengre innlegg, kan du faktisk se dette sprett ned. Men du vil merke at det er ikke på toppen av siden. Cool. Stor. Så det er en ganske grei eksempel på noe enkelt at du kan gjøre med Laravel. Men du kan legge merke til her at Vi har gjort mange ting med relativt liten mengde med kode. Laravel tillater oss å gjøre det SQL-spørringer bak kulissene. Det gjør sanitær for oss bak kulissene. Tillater oss å gjøre disse relasjonene veldig lett uten oss måtte å gjøre noe SQL delta uttalelser til kombinere kommentarer med hva innleggene. Lar oss å gjøre dette arv av maler slik at vi kan definere disse hekke filer slik at vi ikke gjenta oss selv, akkurat som når vi hadde det visning av blogginnlegg at vi ikke trenger å kopiere og lime inn koden. Og herfra kan du bygge stadig mer kompliserte programmer. Du kan forestille deg hvis vi ønsket å gjennomføre logge inn, vi kunne si, få inn en tredjepart rammeverk som gjør det mulig for oss å gjøre det. Det er en haug av dem som er virkelig, virkelig flott at du liker, passordgjenoppretting. Og det vil sende deg en tilbakestille passordet epost. Vi kan implementere tillatelse slik at jeg kan lage et innlegg, men noen andre kan ikke redigere det. Vi kan implementere funksjonalitet for å slette innlegg. Men du kan se her at vi har ganske mye alle rudimentære komponenter å bygge noen virkelig, virkelig, dynamiske og spennende web apps. Så med det, tror jeg vi er bra. Har dere noen spørsmål? Ja? SPEAKER 3: Hvordan gjør du få statisk innhold? ERIC Ouyang: Statisk innhold. Så du har sett før at når vi hadde denne retten her, dette oppsettet innhold, Vis gjøre, vi hadde denne uten denne matrisen etterpå. Blog.index, vi hadde denne som bare en statisk fil. Så hvis vi ikke passerer noe sammen til det, det vil bare gjengi HTML direkte. Men hvis vi passerer i denne assosiativ rekke innlegg, som er dynamisk trekkes fra databasen, vi kan gjøre siden dynamisk. Cool. Andre spørsmål? SPEAKER 3: Hvordan vil du sammenligne Laravel til kanskje noen andre alternativer? ERIC Ouyang: Sure. Yeah. Så Laravel er-- det er en stor question-- ett av mange alternativer for web rammeverk. Så Ruby on Rails er en som er populært. Jeg tror Twitter pleide å være implementert med Ruby on Rails. Jeg tror de har siden byttet. Det er en annen en som heter FuelPHP. Så Ruby on Rails bruker Ruby språk og implementerer mye av MVC stuff som vi ser her. FuelPHP er en annen PHP rammeverk. Django er en av mine favoritter. Det er en web-rammeverk for Python. Så du kan skrive din web app i Python. Så det er massevis av disse alternativene. Laravel, tror jeg, av og stor er min favoritt rett nå for PHP bare fordi av komponentene som vi snakket om tidligere. Det er Komponist aktivert. Det inkluderer en virkelig, virkelig uttrykks ORM system. Har også en virkelig fantastisk templating språk som noen av de andre bare gir ikke. Og vandringer. Vandringer er awesome også. Cool? Awesome. Vel, takk så mye for ser dette seminaret, og lykke til på den endelige prosjekter.