[Muziciranja] ERIC Ouyang: Hej, svima. Dobro došli. To je zgrada Dinamičko Web Apps s Laravel. Moje ime je Eric Ouyang. Ja sam student studira društvene znanosti sa sekundarnim u računalnoj znanosti, i ja živimo u Adams Kuća ovdje na Harvardu. Dakle Laravel, na većini jezgri, je MVC web aplikacija okvir. Tako se sviđa ono što ti dečki imaju radili s CS50 financija, Laravel je okvir koji omogućuje da izgrade dinamičkih web aplikacija. Dakle, možete misliti da je to na neki način kao produžetak tipa stvari ste radili u CS50 Financije, ali sustav koji je Mnogo više robustan, puno više elegantan u nekim osjetilima, i pruža dosta funkcionalnost za vas izgraditi prilično složena web aplikacije. Pa krenimo kroz neke od ključnih značajki, a onda ćemo zaroniti Primjer izgradnje blog Zahtjev s Laravel. Dakle, jedna od prvih stvari koje ga razlikuje od MVC vrsti posla da ste radili sa CS50 je li to uključuje ORM motor. Tako ORM označava objekt relacijske mapiranje. Dakle, to vam omogućuje da izgradite sloj apstrakcije između baze podataka i vaši kontrolori. Dakle, za razliku od CS50 financija gdje izravno napraviti upite, ORM sloj vam omogućuje da sažetak to i stvoriti modeli koji su moćniji od Možete izravno sa SQL upitima. Još jedna stvar koja je stvarno korisno je nasljedan predložaka. Tako ćete primijetiti u CS50 financija, završiti prepisivanjem puno stvari, gdje mjesta koje bi potencijalno ponovno stvari, niste u mogućnosti. Dakle, ovdje u Laravel, možete koristiti ono što je poznat kao noža predloška motora stvoriti majstor izgled. A od tamo, možete naslijediti tako da pod-predlošci mogu zapravo uključuje elemente unutar da veće baze predloška. Migracija. Dakle, to je prilično standardne značajke na Većina modernih okviri web aplikacija. Dakle, to vam omogućuje da predstavljaju Promjene sheme baze podataka u kodu. Dakle, bez reći, phpMyAdmin, zapravo možete stvoriti ove migracije gdje predstavlja bazu podataka shema mijenja u kodu izravno. I to vam omogućuje to-- posebno Ako imate više ljudi koji rade Na istoj web application-- pratiti te promjene, kažu u GitHub, ili neki drugi repozitorij. Dakle, ovo je stvarno korisno i ublažava potrebu da, recimo, prođe oko puno SQL deponijama. I na kraju, skladatelj je nešto jako, jako korisna koja vam omogućuje da koristite drugi ljudi kod učiniti strašan stvari. Tako Laravel je strukturiran kao više skladatelj paketa. Dakle, kažu, ako ste htjeli dovesti u autentifikacije paketu ili ako ste htjeli dovesti u nekim vrsta generatora pisma ili admin sučelje, možete priključiti i igrati oni dijelovi sa skladatelja. Tako ćemo početi. Sva pitanja iz tebe Dečki Prije nego što počnemo? Nema pitanja? Cool. Dakle, prvi korak je instaliranje skladatelja. Dakle Skladatelj vam omogućuje da upravljanje tim ovisnosti, je li to Laravel okvir ili neka treća strana proširenje. Prva naredba omogućuje da preuzimanje Skladatelj, a druga naredba omogućuje vam da ga premjestiti u lokalnoj bin mapu tako da možete pokrenuti Skladatelj izravno preko terminala. Nakon toga, ići naprijed i stvoriti novi Laravel projekt. Mi smo zapravo događa da koristite neki primjer koda da sam stavio zajedno stvoriti ovaj blog. Ali, ako ste počevši od ispočetka, što bi koristili ovu naredbu ovdje, skladatelj stvaraju-projekt, laravel slash laravel, a zatim naziv vašeg projekta. I to će uključivati Svi distribucija kod za pokretanje novog Laravel projekt. Dakle, za CS50 završne projekte, vi ćete Vjerojatno želite koristiti tu naredbu. Ali mi ćemo početi s tim. Dakle, nakon što ste učinili da, ti si idući u dobiti prilično opsežna broj datoteka u blog50. Pa neka je samo proći kroz Neki od ovih komponenti. Primijetit ćete na tom putu imenik, postoji app mapu. Unutar aplikacije mapu, postoji par korisnih mape. Uvažen početi s ovo config mapa. Dakle, to postavlja kako Vaše web aplikacija će, recimo, ovjeriti osobe ili novčani stvari ili povezivanje na bazu podataka. A ono što je stvarno korisno je da Laravel omogućuje vam da postavite različite razvojnim okruženjima. Dakle, ono što smo učinili ovdje ako idemo pod lokalnu mapu, Tu je database.php datoteka. A vi ćete primijetiti da se ovdje smo postaviti MySQL veze to omogućuje pojedincima da povezivanje na MySQL poslužitelj koji je izravno na CS50 aparata. I mi smo povezivanje na bazu podataka da sam postavio zove Blog50. Tako ćemo zapravo ići naprijed i pokrenuti radna verzija ovog, samo da bi dobili osjećaj za ono što Zahtjev da gradimo izgleda. Dakle, imam kopiju ovo Blog50 završen. Dakle Laravel zapravo je izgrađena na poslužitelju da možete pokrenuti izravno iz naredbenog retka. Dakle, to je slično PSet prije kada zapravo izgraditi vlastiti poslužitelj u C Dakle, oni su jedan izgrađen u tako koje možete izvoditi svoje Laravel aplikacije izravno iz naredbenog retka. Dakle, ako ćemo napraviti php obrtnik služiti, to će lansirati razvoja poslužitelja na portu 8000. Dakle, ako ćemo ići na lokalnom računalu 8000, primijetit ćete da je, hej. Mi imamo blog gore i trčanje. Dakle Laravel ovdje se generira naslovnica našeg bloga. Vrlo jednostavna aplikacija. No, tu je par stvarno divan značajke da pruža ispod haube. Tako blog prijava je jednostavan. Ako smo htjeli stvoriti mjesto, možemo kliknuti na taj gumb. Možemo reći: "Hej, svima. To je stvarno zabavno Seminar "npr. I napisati nešto ovdje. Tekst ovdje. Ako kliknete Pošalji, vi ćete primijetiti da je naš novi blog Post je dodan naslovnica bloga. Ako idemo ovamo, primijetit ćete da je bilo je nekih komentara već na blogu. Dakle, ako se pomaknite prema dolje, da ćete primijetiti da je Jonathan Tan kaže da je vrlo je zaintrigirao ovaj post. Tako ćemo ići u tome objekta relacijskim mapiranje omogućuje što učiniti tih odnosa u prilično bešavne način. Cool. Bilo kakva pitanja o funkcionalnosti onoga što ćemo graditi? Cool. Tako ćemo početi s zapravo stvaranje tablice baze podataka. Dakle, podsjećaju da je u CS50 financija, te sastaviti tablicu za korisnike kao i dionice u svom portfelju. Dakle, kao što smo spomenuli ranije, ono što koristimo u Laravel je nešto poznato kao seoba. Dakle, ako ćemo se vratiti u Raspodjela kod ovdje, Prva naredba da se pomoći da vam Laravel omogućuje ovo seliti naredbe. Dakle, možemo napraviti php obrtnik migriraju: napraviti. Dakle, to nam omogućuje stvaranje migracija. A onda ćemo htjeti stvoriti migracije zove create_posts_table, što se događa da, gdje ćemo biti pohranu naše blogu. A vi ćete primijetiti da se ovdje to radi kroz neko koda koji zapravo stvara datoteku s vrijeme pečat na njega. Dakle, ako ćemo ići i pogledati bazu podataka, ćemo primijetiti pod migracije da je stvorio prazan file za nas koji sadrži standardne kod sa imenom da mi je navedeno, stvarati postove stol. A ima dvije funkcije u njega. Gore je ono što želimo da se prilikom migracije primjenjuje u bazu podataka. A dolje je ono što ćemo učiniti kada želimo preokrenuti migracija. Dakle, ovdje ćemo početi s pisanjem ovog migracija. Tako je korisno klase U Laravel naziva sheme. Tako ćemo pokrenuti Schema :: stvorili. A mi ćemo stvoriti stol pod nazivom postove. I ovdje ćemo primijeniti to pomoću funkcije. A u tu, idemo se zapravo odrediti sadržaj našeg stola. Mi ćemo stvoriti ID, što je auto-povećavati. Osim toga, idemo stvoriti polje koje predstavlja naslov naše blogu. Mi smo također će stvoriti polje za spremanje teksta našeg blogu. I na kraju, idemo pohraniti neke vremenske oznake kada je naš post je stvorio i kada je obnovljeno. A dolje, to je prilično jednostavan. Sve što želite učiniti je ispustiti Tablica koje smo stvorili. Veliki. Bilo kakva pitanja? Pa sad, ako ćemo ići naprijed and-- zapravo, lokalni domaćin, neka mi izbrisati ono što smo imali ranije. Idi na bazama podataka. Ja ću izbrisati ono što smo imali ranije. Kap to i stvoriti Nova baza Blog50. I što sad čarobni dio je da se ovdje smo može primijeniti ove migracije izravno na bazu podataka pomoću naredbenog retka alat. Dakle, ako ćemo napraviti php obrtnik migriraju, primijetit ćete da je, hej. To je stvorilo migracije stol, koje ćemo pogledati u malo, i to primjenjuje ovaj prvi migracija. Tako gledamo Blog50, primijetit ćete da je stvorio dva stola za nas. Prvi je to migracije stol. Dakle, ako smo pregledavati to, primijetit ćete da je Ova tablica je prilično jednostavan. To je samo rekao da je, hej. Mi smo primijeniti ovu migraciju. Mi se vratiti i pogledati postove. Primijetit ćete da je struktura je upravo ono što smo ga pitali. Imamo auto-povećavati ID. Imamo niz za pohranu naslov i tekst polje za spremanje sadržaja. Veliki. Cool. Bilo kakva pitanja o migracijama rad, kako bismo ih može prijaviti? Ne? Cool. Pa sad ćemo ići naprijed a zapravo stvoriti model. Dakle, želimo stvoriti postova model koji pohranjuje apstrakciju baze podataka. Dakle, umjesto da rade MySQL upita izravno, idemo napraviti. Dakle, moramo stvoriti mapa ovamo zove modelima. A u tu, idemo se stvoriti datoteku pod nazivom post.php. Unutar tog PHP datoteku, ćemo stvoriti klasa nakon što se proteže rječit. Rječito je naziv ORM motor koji Laravel pruža. I ovdje, možemo očekivati ​​da što zapravo trebate napisati neki kod. Idemo pisati neke pomoćne funkcije kasnije. No, iz kutije, to će već prepoznati ono što je u bazi podataka i možemo pristupiti, kažu, tekst naše blogu ili naslov, i stvoriti stvari izravno s prilično nema kod god. Dakle, to je jedan od čarobnih sastojaka. I vjetar je jednom ove klase je više punopravni, ćemo uključiti podatke o tome što to se odnosi na, tako komentarima. Također stvoriti funkciju tako da možemo zapravo izravno dobiti URL od blogu na stranici. Cool. Bilo kakva pitanja o tome? Ne. Cool. Dakle, sada kada imamo naš model, mi želite stvoriti kontroler koji je moći sučelje s ovim modelima, a nakon toga baza podataka. Dakle, ako uzmemo pogled BlogController, vi ćete primijetiti da postoji ne koliko ovdje sada. Sve što postoji indeks funkcija koja generira početnu stranicu ali bez ičega Tu se prikazati još. Dakle, prvi funkciji da ćemo stvoriti je onaj koji nam omogućuje stvoriti blog post. Tako ćemo proglasiti Nova funkcija zove newPost. A u tu jednostavno, idemo postaviti izgled ove stranice da se donese verziju, Ako se sjećate iz CS50, ovog predloška zove blog.new, koji ćemo napraviti u malo. Primijetit ćete ovdje na liniji šest koje ćemo navesti ovaj varijablu, izgleda. A ako pogledamo na stavove mapu, Tu je izgleda mapa, koje uključuje vrlo osnovni HTML datoteku. I imajte na umu, primijetit ćete da imamo ovaj spremnik Ovdje koja daje sadržaj. Dakle, unutar našeg predloška što ćemo raditi je stvoriti što će biti supstituirani izravno u tom rasporedu. Zato smo rekli da želimo pružiti Predložak zove blog.new. No, unutar bloga, postoji Još nije ovaj novi predložak. Tako ćemo stvoriti file zove new.blade.php. To govori da je Laravel Ova PHP datoteke treba biti donesena u Oštrica predložak motora. Dakle, to je prilično jednostavan datoteka. To će biti forma kojom mi zapravo dodati u blogu. Tako magiju ovdje iz Baština je to, hej. Želimo odrediti da poglavlje, poglavlje sadržaj Ovdje, koja je nacrtana bysection istop. Dakle, ono što je između njih ovdje će biti zamijenjen u glavnoj izgled. I ovdje ono što želimo učiniti je Vrlo jednostavno stvoriti novi HTML datoteku. Ajmo dodali brzo naslov. Dodaj blogu. A u njemu, mi smo će stvoriti oblik. Ovaj oblik će imati akciju. A to će biti nešto da smo zamijeniti kasnije, pa ćemo vidjeti kako usmjeravanje uklapa ovdje. Ali mi jednostavno ide definirati za sada kako to ide na URL s rute iz createPost. A onda to ide imati postupkom nakon. Unutar ovdje, idemo da imaju dva polja. Div class = "oblik-grupa". Mi smo pomoću Bootstrap CSS knjižnicu milostivo pruža Twitter. Tako ćemo stvoriti dvije od njih. Dakle, ovaj prvi ulaz će biti naslov. Dakle input name = "naslov". Class = "formcontrol". Upišite = "text". Idem dodati rezervirano = "Naslov". A onda druga je će biti tekstualni. Name = "sadržaja". Class = "formcontrol". I rezervirano = "Napišite ovdje". Tamo idemo. Konačno, ćemo dodaj brzo dostaviti gumb. Upišite = "submit" class = "BTN BTN-primarne". Dakle, to su sve značajke Bootstrap tako kako to može biti određen u na način koji je plijen korisnika, nego golim HTML. Tako smo definirali kontroler ovdje. Mi smo definira vrlo jednostavan pogled. No, ono što nedostaje je vezivno tkivo. Dakle, u ovom trenutku, Laravel nema pojma kako ćemo zapravo pristupiti ovoj kontroler. Dakle, to je definirano u file zove routes.php. A sada, imamo jedan put. Koja je kad idemo Početna put za ove web stranice, to će donijeti Indeks kontroler. Pa evo što trebate učiniti je provesti Novi put za nas stvoriti mjesto. Dakle, mi koristimo ovu metodu dobiti, što određuje da kada korisnik pokuša dobiti ovaj page-- posebno Post slash novi page-- što ćemo raditi se koristiti kontroler nazvan BlogController novi post. Onaj koji smo upravo stvorili. A onda ćemo to Alias ​​kao newPost. Idemo napraviti još jedan funkcija u malo. No, ono što je ovdje u ključ "kao" ono što možemo zamijeniti u roku Naši Blade predložaka. Dakle, za sada, neka je Zapravo također kažu put. Tako smo i idemo stvoriti kontroler tako da možemo stvoriti ove postove. Dakle, ako korisnik postove na stranicu postu slash novi, što ćemo učiniti je koristi kontroler koji ćemo napraviti uskoro nazvao BlogController na createPost. I mi ćemo alias ovo sa što createPost. Cool. Bilo kakva pitanja? Cool. Tako ćemo pokrenuti ono što smo do sada. Dakle, ako ćemo napraviti php obrtnik služe, vidjet ćemo puno pogrešaka. Tako da izgleda da imamo sintakse pogreške na putevima linija 27. Ah. Nedostaje jedan zarez. Dakle, ako ćemo ići na 8.000, vidjet ćete još ništa ovdje. Dakle, to je početna stranica zadana. Ali, ako idemo na post slash novi, hej. To će biti obrazac koji smo upravo stvorili. Upravo sada, nemamo provodi funkcionalnost kada smo pritisnuti gumb Pošalji. Dakle, ako smo kliknite na Pošalji gumb, to će se izvoditi na pogrešku. No, idemo kod koji upravo sada, upravo ono što smo Želite raditi kad korisnik podnosi ovaj obrazac. Tako ćemo učiniti. Vratite se kontrolorima datoteke. Ono što ćemo učiniti je implementirati ovu novu funkciju koji omogućuje nam stvaranje post. Objavite novu funkciju. Javna funkcija createPost. I ova funkcija će biti malo sofisticiraniji nego što smo imali prije. No, vidjet ćete da se ovdje nismo će zapravo napisati bilo koji SQL. ORM, elokventna ORM, što će omogućiti da učinimo to u nekim načina elegantniji način. Tako ćemo stvoriti novi post. I ovdje smo instantiating novi objekt od modela koje smo upravo stvorena, nakon modela. A što ćemo učiniti je postaviti Naslov atribut ovog pomoću nečega koje smo dobili od poslužitelja. Dakle, to je slično onome što smo imali prije u CS50 financija gdje bismo učinili, koristite super Global Post potrazi za naslov. Dakle Laravel daje neke sanitarne i sitnica pomoću ovog pomagač funkcije. Dakle, mi bi radije koristiti ovaj umjesto ovog vrlo osnovni sirovom obliku s PHP. A onda što ćemo učiniti je postaviti Sadržaj tome da ulaz dobili sadržaja. Mi smo zapravo događa da zamotate to u korisne funkcije kako PHP pruža zove nl2br, koji Ispada nove linije, NLS, postiže bs, pauze, tako da mi zapravo može imati različite stavke u njemu. I na kraju ono što ćemo učiniti je spremiti ovaj post. Tako mi zovemo funkcija spremiti na ovom modelu. Idemo spasiti post. I na kraju ono što ćemo učiniti je preusmjeravanje korisnika posebno na putu koji smo si idući u stvoriti kratko, alias by viewPost. A mi ćemo proći u argumente id, kao id tog novi post. Veliki. Pa sad, ako smo zapravo ići i pokrenuti to. Mi ćemo dodati novi post. Recimo da je ovo seminar 50. I kažu, sigurno. Asdl. God. Neka vrsta sadržaja. I dostaviti ga. A mi ćemo primijetiti da je, hej. ruta nije definirano. Ali ako pogledamo phpMyAdmin i tražiti li ili ne naše funkcije učinio ništa. Pogledajte Blog50 postove. Mi ćemo primijetiti da je, hej. U stvari, samo mi je stvorio taj blog post s vremenske oznake kao što je navedeno. Pa sad idemo natrag i zapravo stvoriti ova druga funkcija u našem kontroler, posebno viewPost kontroler. Tako javnu funkciju viewPost. Pa evo što ćemo učiniti, umjesto vlasništvo prazne zagrade, ćemo želimo proći u ID Post da mi stvaramo. I odavde što ćemo učiniti zapravo upita baze podataka za to. Dakle, ako mi ne postavljati, postoji funkcija zove Nađi koji nam omogućava da ga upita po ID. Naime, zapravo, idemo koristiti alternativnu verziju ovog naziva Pronađite ili Fail, koja nam omogućuje prestati iz ove funkcije, baciti iznimku ako je ID prolazimo u ne postoji. A onda ćemo napraviti nešto slično onome što smo učinili ranije gdje smo postavili sadržaj ove stranice se donio verzija ovog novog gledišta što ćemo napraviti, blog.view. A mi ćemo proći u it-- baš kao u CS50 uzvratiti function-- rječnika varijabli. Ključevi ove asocijativni niz postati varijable unutar predloška. Tako ćemo napraviti Post. Tako prođe neizravno post koji smo pitali iz baze podataka. , Sada ono što ćemo učiniti je stvoriti ovaj prikaz tako da mi zapravo može vidjeti Na blogu koji smo izgradili. Tako ćemo stvoriti file zove view.blade.php. Dakle, unutar tog predloška, što ćemo raditi se sastaviti jednostavna stranica koja omogućuje nam prikaz sadržaja. Tako mi dio, koji je prije sadržaja. Prestani. A što ćemo učiniti u roku ovdje napisati neke HTML za prikaz ovu stranicu. Tako ćemo ga završiti s fancy Novi HTML5 Element zove članak. I ovdje, idemo da ima zaglavlje gdje ćemo jednostavno morati H1, koja uključuje i naslov posta. Dakle ovdje, ako gledamo ovu double kovrčava Brace zapis, to će učiniti u biti PHP odjek pošta naslov. Dakle, to je korisno stenogram da Laravel nam pruža. Tako ćemo iskoristiti ovaj zapis umjesto. I ovdje, idemo na isto ispisati sadržaj njega. I ovdje, idemo učiniti postavljati sadržaj. A na dnu što smo učiniti je stvoriti podnožje. A u podnožju, idemo Prvi zaslon kad je to objavljeno. Dakle, ovo je pošta u, stvorena u. I Laravel koristi jako lijepo Datum knjižnica pod nazivom Carbon. Dakle, mi zapravo može učiniti nešto što se zove difforHumans, što ste vidjeli prije. Kad smo objavili. to će reći, kao što su, pet sekundi prije. Dakle, to je jako lijepo Funkcionalnost Laravel. I na kraju, idemo zatvoriti ovo podnožje. Pa sad, ako se vratimo na Početna ćemo vidjeti ništa ovdje još, jer nismo kodirano up početnu stranicu. Ali, ako idemo na post kose crte jedan, ćemo vidjeti iznimku. Se bilo tko znati zašto vidimo izuzetak? Što mi nedostaje? Bilo koji ideja? Dakle, ono što smo radili ranije je za nas zapravo definirati kako ćemo doći do Posebni kontroleri? SPEAKER 1: route? ERIC Ouyang: Da. Dakle, još moramo odrediti rutu. Tako smo se vratiti ovdje da routes.php. Primijetit ćete da smo nisu zapravo definirani Kako ćemo doći na ovom kontroleru. Dakle, sada ćemo definirati ovu rutu. To je prilično jednostavan, slično onome što smo radili ranije. No, ono što ćemo primijetiti ovdje da ćemo imati rezervirano mjesto. Dakle, ako mi route.get Slash ID posta. Dakle, ID je ono što se događa na biti donesen u kontroler. To će se koristiti Regulator da smo upravo stvorio, BlogController na viewPost. A mi ćemo se alias to kao viewPost. Veliki. Dakle, sada ćemo napraviti ovaj put. Pa sad, ako ćemo ići ovdje i osvježite ovu stranicu, mi zapravo nemamo naš novi blog post. Dakle, to je ono što smo stvorili ranije. Vrlo jednostavno stranici, ali prikazuje blog koji smo upravo stvorili. Cool. A ako ćemo zapravo proći kroz cijeli Proces stvaranja nove blogu, ćemo primijetiti da je sve preusmjeravanja ispravno. Ako kažem: "Bok. Ja sam Jonathan Tan. " Recite: "Ovo je moj blog." I dostaviti ga, to će stvoriti ovaj novi blog post s ID 2, koji koracima od onoga što smo imali prije i prikazuje ispravno. Awesome. Bilo kakva pitanja? Da? ZVUČNIK 2: Da li Laravel ručku saniranju i sve za vas? ERIC Ouyang: Da. Dakle, kada smo vidjeli ranije, kada što smo učinili za unos debelog crijeva dobili, da sanitates bilo SQL injekcije i sitnica da bi bilo dobro obaviti ako smo zlonamjerni korisnik web stranice. Dakle Laravel ručke puno to iza kulisa. Dobro pitanje. Tako ćemo pogledati na početnoj stranici. Dakle, ako smo prvi povratak u Regulator za početnu stranicu, primijetit ćete da je to ne učiniti mnogo ovdje. Primijetit ćete da nismo prolazi u ovom kontroleru ništa osobito korisno. To je samo ovaj indeks datoteka. Tako ćemo proći u to je nešto korisno. I posebno, mi smo će proći u postovima. I Laravel omogućuje nam učiniti sve dužnosti, koje će nam omogućiti da se sve postove. Sada, ako ćemo se vratiti index.php, vidjet ćete, hej. Ništa još ovdje. No, ono što želimo učiniti ovdje zapravo ponoviti kroz, napraviti foreach petlju nad postovima da omogućuje nam da ispisati postove. Dakle foreach postove kao Post, ono što želite učiniti se ispisati sadržaj o blogu. No, jedna stvar koju ćete primijetiti je da je mi zapravo napisao većinu tog koda Već u view.blade.php. Pa što ćemo zapravo učiniti je koristite lijep korisne značajke Blade a faktor ovaj zajednički kôd. Dakle, idemo ovdje. Idemo uzeti ovaj sadržaj upravo ovdje, a ono što ćemo učiniti je stvoriti novu mapu. Ajmo to zvati parcijala. I ovdje, idemo stvoriti post.blade.php. Dakle ovdje, uračunata mi se način na koje želimo prikazati ove postove. I ovdje ćemo učiniti umjesto zapravo da taj HTML izravno, ćemo iskoristiti ovu direktivu zove uključuju blog.partials.post. A što ćemo učiniti ovdje je proći u postu na stranici. Pa sad, ako ćemo se vratiti ovdje, mi ćemo primijetiti da je funkcionalnost je i dalje isto. No, sada imamo ovo uračunata iz koda, ovaj HTML. Dakle, možemo ga koristiti u indeksu. Dakle, ovdje, to je vrlo jednostavan. Sve što radimo je uključiti blog.partials.post i niz. A negdje prije, mi radimo Post. Pa sad, ako se vratimo na početna stranica, vidjet ćemo da je, hej. Imamo popis svih blogu koje smo imali prije. Mi možda želite dodati neke "ako" Uvjeti i "drugi" uvjetima tako da ako nemamo bilo na blogu, želimo prikazati nešto korisno. Kao, hej. Nema sadržaja još na blogu. A ako ti dečki zapravo pogledati Raspodjela kod na GitHub, ćete vidjeti primjer kako ćemo to učiniti. Cool. Bilo kakva pitanja? Da. ZVUČNIK 2: Valjda samo temeljno pitanje. Natrag na ruti. ERIC Ouyang: Da. Ako pogledamo rutama. ZVUČNIK 2: Gdje uses.blogcontroller na stvaranje post, što to nas uputiti? ERIC Ouyang: Da. Da. ZVUČNIK 2: Ili ono što je that-- ERIC Ouyang: Pa, pogledajte, kažu primjerice, ovaj put ovdje. Prvi dio je stvarna URL koji korisnik će ići. A ovo polje ovdje asocijativni niz, definira Kako želimo imati Zahtjev čin u odgovoru na njega. Dakle, koristi se regulator, funkcija koja smo želite nazvati kada Korisnik ide na ovaj URL. Dakle viewPost ovdje bio funkcija koja se definira u od BlogController-- ZVUČNIK 2: vidim. ERIC Ouyang: -SO tu mi zapravo može donijeti pogled, obavljati neke izračune, interakciju s SQL baze podataka. ZVUČNIK 2: OK. ERIC Ouyang: A onda drugi dio, "kao što je" je pseudonim koji se koristi. Dakle, ako smo obavijest kada stvorili smo obrazac, Primijetit ćete da URL :: routecreatePost. Tako će ga zamijeniti u stvarni URL tako da nismo tvrdi kodiranje to u tako da ga se može mijenjati Jednom, kažu, ako smo htjeli preimenovati. Umjesto nakon precrtana Novi, želimo raditi kao, p slash novi samo za čišćenje naše URL-ova bitnim. Mi bi ga promijeniti na jednom mjestu, a nego u svim različitih datoteka. Cool. To je dobro. Dakle, sada imamo vrlo Osnovna blog platforma. Mi vjerojatno želite dodati u gumb, tako da mi zapravo može stvoriti nove postove. Dakle, ako pogledamo u Layout Učitelja, imamo rubriku zaglavlja Pravo da smo upravo definirano gore na vrhu. Dakle, možemo dodati gumbiće u vrh od napadača. Dakle, ako ćemo ići na index.blade.php, zapravo učiniti je odrediti što se događa unutar ovdje. Tako je ovaj dio zaglavlja Pravo, što ćemo raditi je dodati gumb da ide na URL definirane trase novi post. Samo da ga počistiti i napraviti je lijepa i sve Bootstrap, ćemo napraviti to zadani gumb. Ajmo učiniti velike zabave. A u njemu, mogli bismo staviti neki tekst. No, ono što Bootstrap daje se glyphicons. Dakle, mi zapravo može dodati da je Lijepo olovku da smo ranije vidjeli. Glyphicon. Glyphicon-olovka. Dakle, to će nam omogućiti da se stavi U ikonu umjesto teksta. Sada, ako mi ne prestane, to definirat će ovo poglavlje. I, hej. Imamo lijep tipku koja nas povezuje izravno dodavanje blog posta stranicu. Dakle, imamo prilično jednostavan blog. Možemo dodati stvari za njega. No, ono što očekuje od blogova je komentirajući. Dakle, to je jako važno za nas da se, kažu, ako netko posjeti web stranicu i stvarno voli post koji mogu sudjelovati u raspravi s drugim ljudima koji posjećuju stranicu. Tako ćemo ići i stvoriti Nova tablica baze podataka i novi model tako da možemo povezati Komentari s postovima. Dakle, prvi korak, baš kao i prije, je da moramo pokrenuti migracije. Dakle kao prije, mi radimo php stručnjak Seliti: napraviti. A mi ćemo stvoriti jedan zove create_comments_table. To će stvoriti datoteku da je naš novi migracija. I mi ćemo, kao i Prije određuju novi stol. Dakle, shema :: izradu stol pod nazivom komentare. Ova funkcija ovdje. I u ovoj tablici ono ćemo napraviti je prvi, kao i prije, dodijeliti ID. Koracima ID. Ćemo dopustiti korisnik to povezati njihovo ime s posebnim komentar. Mi ćemo imati neki sadržaj koji ide uz ovaj, tekstualni sadržaj. I ovdje što ćemo to je nešto drugo. Mi ćemo stvoriti cijeli broj kako se zove POST_ID koji će značiti ono mjesto Posebno komentar ide s. Osim toga, mi zapravo ide postavili strani ključ ograničenje na to. Dakle, MySQL će provoditi taj. Mi ne pokušavamo dodijeliti komentar broj 5 na post 5000, ako nemamo imala 5,000 postova na njemu. Dakle, ono što mi radimo ovdje, mi strano POST_ID će biti povezan s Polje ID sa stola postove. A mi ćemo zapravo učiniti nešto drugo korisno, je onDelete. Dakle, ako smo izbrisali neke objaviti iz baze podataka, da želimo kaskadni briše za komentare, kao dobro. Budući da to nije vrlo korisno za nas da imaju primjedbe na postove da ne postoje. I na kraju, kao i prije, da smo će postaviti vrijeme marke na to. I kao prije, idemo ima obrnuti migracije se spustivši tablice komentare. Pa sad, ako ćemo se vratiti ovdje, idemo pokrenuti ovu migracija, obrtnik useliti. A sada je primijenjena ta migracije da smo upravo stvorili. Dakle, ako smo pogled na phpMyAdmin, mi, u stvari, sada imate komentare stol koji ima Struktura da smo upravo naveli. Dakle kao prije, da smo će stvoriti novi model na apstraktnoj SQL tablice da smo upravo stvorili. Tako ćemo dodati nove datoteke. Mi ćemo ga nazvati comment.php. I to je zapravo će biti prilično jednostavno sa malim promjenama Prema onome što smo imali prije. Dakle klase Komentar proteže rječit. A što ćemo učiniti ovdje se definira funkcija koja je Odnos s drugim modelima. Tako ćemo imati poštu funkciju da se ovdje vraća taj odnos. Tako smo navodeći da je to pripada objaviti, rekavši da je on nakon da je ovaj komentar pripada. To zapravo mora biti kapital P za model. A sada je samo na drugi Flip strana, moramo reći da je, hej. Postovi komentare. Pa što ćemo učiniti je definirati javne komentare funkcija. I ovdje se vratio to ima mnogo komentar. Tako sada magično kada imamo dužnost, možemo dobiti atributa komentare i to će ga popuniti s Podaci iz baze podataka. Tako ćemo zapravo proći i dodati novu značajku za naše stajalište datoteke tako da možemo i zaslon i stvoriti komentare. Tako ćemo definirati novo poglavlje. Ajmo to razdvojiti s horizontalnom pravilo. Odjeljak id = "komentari". Ono što ćemo raditi Ovdje je, kao i prije, ponoviti kroz sve komentare. Pa zapravo koliko mi je to, kao što sam spomenuo, prilično čarobno. Mi ne upisuju komentare. A onda možemo to učiniti za svaku petlje tijekom svakog od komentara. A što ćemo to je komentar div class, a mi ćemo zapravo ispisati ovaj komentar. Dakle prikazati kako hej, komentirati name-- osobu koji je objavio ovu comment-- kaže dot dot dot. Idemo staviti ovo u bloku citat, samo da izgleda lijepo. A onda komentirati sadržaj blok citat. I foreach. Dakle, sada to ide na petlji kroz sve komentare koji je povezan uz svaki od stupova i prikazati svaku od tih komentara. Ja ću dodati još jedan dio prema dolje Ovdje, što nam omogućuje da dodate komentar. Tako H3 klase. Stavite naslov ovdje. Dodaj komentar. A mi ćemo definirati novi oblik. Dakle kao prije, da smo učiniti oblik djelovanja. I ovdje, nova akcija smo će definirati novi kontroler koji omogućuje nam da odgovori na post Zahtjevi za stvaranje komentare. Dakle URL :: rute createComment. Idem proći u parametru ovdje. ID posta mi stvaramo komentar. I zatim se metoda ovog Obrazac će biti poslije. Sada ćemo dodati u dva polja, oblik skupina. To će biti ulaz sa ime "ime" i class = "oblik-kontrole", type = "tekst", te s rezervirano = "Vaše ime". Mi smo također će definirati Drugo područje oblik, koji će biti tekst područje kao što smo imali prije. Baš kao i prije, zovu ga sadržaja. Class = "oblik kontrole." Rezervirano = "Napišite ovdje." I samo tako da smo može zapravo podnijeti, dostaviti tip i klasu "BTN BTN-primarni." Zatvori obrazac. Zatvorite ovu akciju. Pa sad, ako smo osvježite ovu stranicu na kojoj imamo, recimo, određenu dužnost. Moramo ponovno podizanje poslužitelja. PHP majstor poslužiti. Ponovno podizanje sustava to. Moramo definirati rutu. No, za sada, neka je samo uzeti , tako da mi zapravo može vam pokazati što stranica izgleda, a zatim mi zapravo ćete stvoriti taj put. Dakle, hej. Imamo ovaj novi oblik ovdje tako da možemo stvoriti komentare. Tako ćemo zapravo definirati funkcija unutar kontrolera tako da možemo dodati komentare. Idemo natrag. I u blogcontroller.php, što ćemo raditi je stvoriti novu funkciju zove stvoriti komentar. Javna funkcija createComment. To će imati jednu parametar, ID postove da smo komentiranja. I kao prije, da smo će najprije dobiti mjesto. Dakle objaviti, findOrfail id. Nakon toga, idemo stvoriti novi komentar. Dakle komentirati = novi komentar. Komentar name = Input :: dobili ime. Komentar sadržaja = ista nova linija u pauzama ulaznog :: dobiti sadržaja. I na kraju, mi ćemo morati povezati ovaj komentar s poštom. Tako ćemo iskoristiti ova funkcija, komentari, koja nam omogućuje da spremite taj odnos. Tako sada ovaj komentar će imati automatski nakon ID. Također bi mogao postaviti ručno, ali to je više lako pročitati koliko kao funkcija ide. I nakon što smo obavljati to, što želimo učiniti je preusmjeravanje korisnika na Put određeno viewPost s nizom s parametar post ID. I sada, tako da je to zapravo funkcije, moramo definirati ovu rutu. Ruta :: Post. A sada ćemo nazvati to Post slash ID kose crte komentar. Array koristi novu funkciju da smo upravo stvorili. BlogController. CreateComment kao createComment. Veliki. Tako sada nadamo da smo osvježite ovu stranicu i dodati u komentaru, recimo, Davida Malan. "Nadam se da to radi." Pošalji. Mi ne, u stvari, ima komentar na ovom blogu. Cool. Tako sada imamo prilično funkcionalni blogu. Mi samo će dodajte par ugađanje tako da imamo neki korisniji Informacije o ovim postovima. Dakle, ako ćemo se vratiti u naslovnica, nemamo smisla koliko komentari na svakom od tih mjesta. Dakle, ono što mi zapravo događa učiniti je, u našem modelu, definirati pomagač funkciju koja omogućuje nas navesti broj komentara da ide s određenom postu. Tako ćemo stvoriti funkcija pomagač. Javna funkcija. GetNumCommentsStr. Tako string koji određuje broj od komentara koje idu uz to. A što ćemo učiniti je reći da num = Ova komentari računati. Tako ćemo brojati Broj komentara. I ako je taj broj jednak 1, da smo Samo ću se vratiti 1 komentar. A onda na neki drugi način, želimo se vratiti ulančavanje NUM i komentare, tako da smo dobili pluralizacije točna. Samo bi to jedna citat. Jedan komentar. I sada možemo koristiti ovu funkciju neposredno unutar našeg gledišta. Dakle, ako ćemo se vratiti u parcijalni postove koje smo stvorili, Sada želimo da se zapravo prikazati broj komentara. Dakle, ono što možemo učiniti je Post, koristiti ovu funkciju da smo upravo stvorili na prikazati broj komentara. Dakle, ako mi sada osvježiti, to ne, u stvari, prikaz brojčane komentari koje idu uz to. Ako bismo htjeli biti fancy, ako vas zapravo, pogledajte distribucije koda, zapravo možemo povezati ovo komentarima. Ako se sjećate, definira se u roku vidjeti da to ima poglavlje osobne komentare. Dakle, ako smo zapravo htjeli povezati izravno na komentarima, što mi bi ovdje napraviti je href URL rute viewPost. Pass u polju ID post ID. A onda želimo ići posebno poglavlje komentari. Ovdje ćemo zatvoriti oznaku. Pa sad, ako ćemo osvježiti ovo stranica, mi kliknite na ovaj. Mi ćemo ići izravno na poglavlje komentari. Ako smo imali duži post, možete zapravo vidjeti ovu odskočiti dolje. Ali vi ćete primijetiti da je Ne na vrhu stranice. Cool. Veliki. Dakle, to je prilično jednostavan Primjer nešto jednostavno koje možete učiniti s Laravel. No, možete primijetiti da se ovdje smo učinili mnogo stvari s relativno malom količinom koda. Laravel nam omogućuje da učinite SQL upita iza kulisa. Ona radi sanitarne za nas iza kulisa. Omogućuje nam da napraviti tih odnosa Vrlo jednostavno, bez potrebe za nas učiniti bilo koji SQL pridružiti izjave kombinirati komentare s onim postove. Nam omogućuje da to učinite Baština predložaka tako da možemo definirati ove gnijezdo slika pa nismo se ponavlja, baš kao i kada smo imali da Prikaz od blogu da ne moraju kopirajte i zalijepite kod. I odavde možete izgraditi sve komplicirano aplikacije. Možete zamisliti, ako se htjela provesti prijavu u, mogli bismo reći, dovesti u trećoj stranci okvir koji nam omogućuje da učinite to. Postoji hrpa njih da su stvarno, stvarno velika da može učiniti kao što je, lozinka za oporavak. A to će vam poslati reset lozinke e-pošte. Možemo provesti dozvolu tako da mogu stvoriti mjesto, ali netko drugi ne može uređivati. Možemo provesti Funkcionalnost izbrisati postove. No, što se može vidjeti ovdje imamo dosta mnogo su svi osnovni su dijelovi izgraditi neki jako, jako, dinamičan i uzbudljiv web aplikacije. Dakle s tim, mislim da smo dobro. Imate li vi kakvih pitanja? Da? SPEAKER 3: Kako Vam se dobiti statički sadržaj? ERIC Ouyang: Statički sadržaj. Dakle, vidjeli ste prije toga, kada smo imali ovo ovdje, taj sadržaj izgled, Pogled make, imali smo to bez tog polja nakon toga. Blog.index, imali smo to kao samo statički datoteke. Dakle, ako ne prođe sve zajedno s njim, to samo će donijeti neposredno HTML. Ali, ako ćemo proći u ovom asocijativnog niz postova, što je dinamički izvukao iz baze podataka, što Možete napraviti stranicu dinamičan. Cool. Ima li još pitanja? SPEAKER 3: Kako biste usporedili Laravel bi možda nekim drugim opcijama? ERIC Ouyang: Naravno. Da. Tako Laravel is-- to Velika question-- jedna od mnogih opcija za web okvirima. Dakle, Ruby on Rails je jedan koji je popularan. Vjerujem Twitter koristi se provodi s Ruby on Rails. Mislim da sam budući uključen. Tu je još jednom pozvao FuelPHP. Dakle, Ruby on Rails koristi Ruby jezik i provodi puno MVC stvari da vidimo ovdje. FuelPHP je još PHP okvir. Django je jedan od mojih favorita. To je web okvir za Python. Dakle, možete pisati svoje web aplikaciju u Pythonu. Dakle, postoji tona tih opcija. Laravel, mislim, tako i Veliki je moja omiljena u pravu Sada za PHP samo zato komponenata da smo razgovarali o ranije. To je Skladatelj omogućeno. To uključuje i jako, jako izražajna ORM sustav. Također ima stvarno strašan templating Jezik koji neki drugi jednostavno ne daju. I migracijama. Migracije su strašan kao dobro. Cool? Awesome. Pa, hvala toliko za gledajući ovaj seminar, i sretno na svojim završnim projektima.