>> [Zenelejátszási]
>> ERIC Ouyang: Hé, mindenki.
Üdvözöljük.
Ez Building Dynamic Web-es alkalmazások Laravel.
A nevem Eric Ouyang.
Vagyok másodéves tanuló társadalmi tanulmányok egy másodlagos számítástechnika,
és én élni Adams House itt a Harvardon.
>> Tehát Laravel, a legszebb, mag, egy MVC web app keretet.
Szóval tetszik, amit a srácok csináltál ezzel CS50 Finance,
Laravel olyan keretrendszer, amely lehetővé teszi, Ön építeni dinamikus webes alkalmazásokat.
Szóval gondold azt, hogy bizonyos értelemben mint egy kiterjesztése a fajta cucc
csináltál a CS50 Pénzügy, de a rendszerben, amely
sokkal több robusztus, sok elegánsabb bizonyos értelemben,
és ad egy csomó funkciókat az Ön számára
építeni meglehetősen komplex webes alkalmazások.
Szóval menjünk át néhány A legfontosabb jellemzőit,
aztán majd belevetik magukat egy Például az épület egy blog
alkalmazás Laravel.
>> Tehát az egyik első dolog, megkülönbözteti az MVC típusú munka
hogy csináltál azzal CS50 ez magában foglalja a ORM motort.
Tehát ORM áll a tárgyat relációs leképezés.
Tehát ez lehetővé teszi, hogy építsenek egy absztrakciós réteget
között az adatbázis és a szabályozók.
Tehát ellentétben CS50 pénzügyekre közvetlenül lekérdezések,
Az ORM réteg lehetővé teszi, hogy elvont, hogy van, és hozzon létre
modellek sokkal hatékonyabbak, mint akkor közvetlenül az SQL lekérdezések.
>> A másik dolog, hogy tényleg Hasznos örökölhető sablonokat.
Így lesz hirdetmény CS50 Finance, a végén átírása egy csomó dolgot,
ahol helyeken potenciálisan újra felhasználni a dolgokat, akkor nem képes.
Tehát itt Laravel, akkor mi ismert, mint a blade sablon motor
hogy hozzon létre egy törzselrendezést.
És onnan, akkor örökli hogy al-sablonok ténylegesen
tartalmazhat olyan elemeket belül hogy a nagyobb bázist sablont.
>> Migráció.
Tehát ez egy viszonylag standard tulajdonságok legmodernebb webes alkalmazás keretrendszer.
Tehát ez lehetővé teszi, hogy képviselje adatbázissémát változások kódot.
Tehát anélkül, hogy azt mondják, phpMyAdmin, akkor valóban létre ezek a vándorlások
ahol képviselik az adatbázis sémamódosítások a kódot közvetlenül.
És ez lehetővé teszi, to-- különösen ha több ember dolgozik
ugyanazon a web application-- nyomon követni ezeket a változásokat,
mondjuk GitHub, vagy más tároló.
>> Szóval ez tényleg hasznos és csökkenti annak szükségességét,
hogy, mondjuk, áthaladnak egy csomó SQL guba.
És végül, Composer valami nagyon, nagyon hasznos
amely lehetővé teszi, hogy más emberek kódot csinálni félelmetes dolgokat.
Tehát Laravel strukturált, mint Több zeneszerző csomagok.
Tehát mondjuk, ha akarta, hogy egy hitelesítő csomag
vagy ha akarta, hogy néhány fajta generátor script, vagy egy admin
felületen, akkor plug and play ezen alkatrészek zeneszerzővel.
>> Tehát kezdjük.
Bármilyen kérdése tőled srácok, mielőtt elkezdjük?
Nem kérdés?
Cool.
Tehát az első lépés az, telepítése Composer.
Tehát Composer lehetővé teszi, hogy kezelni ezeket a függőségeket,
hogy ez a Laravel keret vagy más harmadik fél kiterjesztése.
Az első parancs lehetővé teszi, Ön letöltse Composer,
és a második parancs lehetővé teszi, hogy helyezze át a helyi bin mappa
így futtatni Composer közvetlenül keresztül a terminálon.
>> Ezt követően, megy előre, és hozzon létre egy új Laravel projekt.
Mi valóban lesz Bizonyos példa kód
hogy én már össze hogy hozzon létre ezt a blogot.
De ha kezdő a semmiből, akkor ezzel a paranccsal
itt, zeneszerző create-projekt, laravel perjel laravel, majd
a neve a projekt.
És ez magában foglalja minden forgalmazási kódot
indítására az új Laravel projekt.
Tehát a CS50 végső projektek, akkor Talán szeretnénk használni ezt a parancsot.
>> De fogunk kezdeni ezzel.
Szóval, ha már megcsináltad hogy fogsz kapni
meglehetősen kiterjedt száma A fájlok blog50.
Szóval menjünk át Ezek egy része.
Észre fogod venni, ebben az útvonalon könyvtárban van egy app könyvtárat.
Bent a app mappába, ott van Pár hasznos mappákat.
Figyelemre kezdeni ez config mappába.
Tehát ez olyan, hogyan a webes alkalmazás
lesz, mondjuk, hitelesíti az emberek vagy cash dolgokat, vagy csatlakozni az adatbázishoz.
>> És ami igazán Hasznos, hogy Laravel
lehetővé teszi, hogy hozzanak létre a különböző fejlesztési környezetek.
Szóval mit tettünk itt, ha megyünk alatt a helyi mappában
van egy database.php fájlt.
És észre fogod venni, hogy itt létrehozott egy MySQL kapcsolat
lehetővé teszi az egyének csatlakozni A MySQL szerver, ami
Közvetlenül a CS50 készüléket.
És mi az adatbázishoz kapcsolódás hogy én felállított úgynevezett Blog50.
>> Szóval tényleg megy előre, és futtassa a működő változat ennek,
csak azért, hogy egy értelemben, amit a alkalmazás, amit építünk
néz ki.
Szóval van egy másolatot ez a Blog50 befejeződött.
Tehát Laravel ténylegesen épített a szerveren
hogy lehet futtatni közvetlenül a parancssorból.
Tehát ez hasonló a Pset előtt, ha valóban
építeni a saját szerver C. Tehát ők egy építettünk be,
hogy lehet futtatni a Laravel apps közvetlenül a parancssorból.
>> Tehát, ha nem teszünk php kézműves szolgálja, ennek indít egy fejlesztési szerver
a port 8000.
Tehát ha elmegyünk a helyi host 8000, észre fogod venni, hogy, hé.
Megvan a blog, és fut.
Tehát Laravel itt generál A címlapon a mi blog.
Nagyon egyszerű alkalmazás.
De van egy pár Tényleg remek funkciókkal
hogy biztosítja a motorháztető alatt.
>> Így a blog alkalmazás egyszerű.
Ha akartuk, hogy hozzon létre egy poszt, akkor kattintson a gombra, hogy.
Elmondhatjuk, hogy "Hé, mindenki.
Ez egy igazán szórakoztató szeminárium, "például.
És írok valamit ide.
Szöveg itt.
Ha kattintson a Küldés gombra, akkor észre, hogy az új blog
poszt bővült a címlapon a blog.
Ha megyünk vissza ide, észre fogod venni, hogy volt néhány megjegyzést már
a blog.
Tehát, ha lépjünk le, akkor észre, hogy Jonathan Tan mondja
hogy ő nagyon izgatta ez a poszt.
>> Szóval megyünk be, hogyan objektumot relációs leképezés lehetővé teszi,
hogy ezek a kapcsolatok meglehetősen zökkenőmentes módon is.
Cool.
Bármilyen kérdése van funkcionalitást A mit fogunk építeni?
Cool.
Szóval kezdjük el a ténylegesen az adatbázis létrehozásához táblákat.
>> Így emlékeztetni arra, hogy a CS50 Finance, akkor összerakni egy táblázatot a felhasználók
valamint a készletek a portfólió.
Szóval mint korábban említettük, mi használja a Laravel
valami ismert vándorlások.
Tehát, ha visszatérünk a elosztó kódot itt,
Az első parancs, amely Hasznos, hogy Laravel nyújt Önnek
ez Migrate parancsot.
Így nem tehetünk php kézműves Migrate: győződjön.
Tehát ez lehetővé teszi számunkra, hogy hozzon létre egy migrációs.
>> És akkor mi szeretnénk hogy hozzon létre egy migrációs
nevű create_posts_table, ami lesz,
hogy hol fogunk legyen tárolása a blogbejegyzések.
És észre fogod venni, hogy itt fut valamilyen kód, amely ténylegesen
előállít egy fájlt, időbélyegzővel rajta.
Tehát, ha megyünk, és nézd meg Database, fogjuk észrevenni alatt Migrations
hogy ez teremtett üres fájl számunkra, amely
van boilerplate kódot a nevét hogy meghatározott, hozzon létre hozzászólások asztalra.
>> És ezt két funkciót benne.
Akár az, amit szeretnénk futtatni, amikor a migráció alkalmazzák az adatbázisba.
És le van mit fogunk csinálni ha azt akarjuk, hogy megfordítsa a migráció.
Tehát itt kezdjük el A írom ezt a migráció.
Szóval van egy hasznos class A Laravel úgynevezett séma.
>> Így fogunk futni séma :: létre.
És fogunk létrehozni egy asztal nevű hozzászólások.
És itt ezt a funkciót.
És belül van, megyünk, hogy ténylegesen adja a tartalmát az asztalunkra.
Megyünk, hogy hozzon létre egy azonosítót, amely automatikusan növekvõ.
>> Emellett megyünk hogy hozzon létre egy területen, amely
képviseli a címe is blogbejegyzést.
Mi is lesz, hogy hozzon létre egy olyan területen, tárolására szövegét a blogbejegyzést.
És végül, megyünk tárolni néhány timestamps
mert amikor mi poszt jött létre és mikor frissítették.
És le, ez viszonylag egyszerű.
Minden, amit akarok, csepp A tábla hoztuk létre.
>> Nagy.
Van még kérdése?
Tehát most, ha megyünk előre, és-- valóban, a helyi befogadó,
hadd törölje, mi volt korábban.
Menjünk az adatbázisok.
Megyek törölni, amit korábban.
Hagyják el ezt, és hozzon létre Új adatbázis Blog50.
És most mi a mágikus rész itt, hogy mi
lehet alkalmazni ezeket a vándorlások közvetlenül Az adatbázis segítségével a parancssorban
eszközt.
Tehát, ha nem teszünk php kézműves Migrate, észre fogod venni, hogy, hé.
Ez hozta létre a migráció asztal, amit majd vess egy pillantást a kicsit,
és ez alkalmazható ez az első migrációs.
>> Szóval nézzük Blog50, észre fogod venni, hogy ez létre két tábla számunkra.
Először is ez a vándorlások asztalra.
Ha tehát böngészni ezt, észre fogod venni, hogy Ez a táblázat meglehetősen egyszerű.
Ez csak azt mondta, hogy, hé.
Írtunk az átállás.
Megyünk vissza, és nézd meg hozzászólások.
Észre fogod venni, hogy a szerkezet Mi pontosan, aki azt kérte.
Van egy automatikusan növekvõ ID.
Van egy szöveg tárolására a cím, és a szöveges mezőben
tárolására a tartalom.
Nagy.
Cool.
Bármilyen kérdése van vándorlások munka, hogyan alkalmazhatjuk őket?
Nem?
Cool.
Tehát most fogunk menni előre és létrehozza a modell.
Ezért szeretnénk létrehozni egy hozzászólás modell tárolja egy absztrakció az adatbázisban.
Tehát nem csinál MySQL lekérdezés közvetlenül, fogunk létrehozni.
Tehát meg kell létrehozni mappa itt nevű modell.
És benne van, megyünk hozzon létre egy fájlt úgynevezett post.php.
>> Ezen belül a PHP fájlt, fogunk létrehozni
egy postai küldeményként amely kiterjeszti sokatmondó.
Sokatmondó az a név, az ORM motort, hogy Laravel biztosít.
És itt, akkor elvárható, hogy ha valóban szükség van írni egy kis kódot.
Megyünk, hogy írjon néhány segédfüggvényünk később.
De ki a dobozból, ez a tény már felismerik, mi van az adatbázisban
el tudjuk érni, azt mondják, a szöveg A mi blogbejegyzést, vagy a cím,
és hozzon létre cucc közvetlenül nagyjából nincs kód nélkül.
>> Szóval ez az egyik mágikus elemek.
És a szél egyszer ebbe az osztályba A több teljes értékű,
mi tartalmazhat információt ez kapcsolódik, így a megjegyzéseket.
Szintén hozzon létre egy függvényt így mi is valójában
közvetlenül az URL Az egy blogbejegyzést oldalon.
Cool.
Bármilyen kérdése van ez?
Nem.
Cool.
>> Tehát most ha nálunk van a modellben szeretnénk létrehozni egy vezérlő, ami
képes érintkezni ezeket a modelleket, és ezt követően az adatbázis.
Tehát, ha veszünk egy pillantást BlogController, akkor
észre, hogy ott nem sok van most.
Minden van egy index funkció hogy létrehozza a honlapon,
de anélkül, hogy bármi ott megjelenítésére sem.
>> Tehát az első funkció hogy fogunk létrehozni
az egyik, hogy lehetővé teszi számunkra, hogy hozzon létre egy blogbejegyzést.
Így fogunk arra, hogy egy Új funkció az úgynevezett newPost.
És idebent egyszerűen, megyünk beállítani az elrendezés oldal
hogy egy render változat, ha visszahívja a CS50,
A sablon nevű blog.new, amely fogunk létrehozni egy kicsit.
>> Észre fogod venni, itt a soros hathengeres, hogy adtuk meg ezt a változót, az elrendezés.
És ha vetünk egy pillantást A Views mappát,
van egy elrendezések mappát, amelyben tartalmaz egy nagyon alapvető HTML fájlt.
És a figyelmét, hogy észre fogod venni, hogy van ez a konténer
Itt produkálnak tartalmat.
Tehát belsejében mi sablon mit fogunk csinálni
A létre, mi lesz helyette közvetlenül az ezt az elrendezést.
>> És azt mondtuk, hogy szeretnénk tenni Sablon nevű blog.new.
De belül a Blog, van még nem az új sablont.
Így fogunk létrehozni nevű fájlt new.blade.php.
Ez azt mondja, hogy Laravel ez a PHP fájl
tenni a blade sablon motor.
Tehát ez egy meglehetősen egyszerű fájl.
Ez lesz a forma, amely által mi valójában hozzá egy blogbejegyzést.
>> Tehát a varázslat itt a öröklődés, hogy, hé.
Szeretnénk leszögezni, hogy a rész, a tartalom része
Itt, amely meghatározta asection ésstop.
Szóval mi a kettő között van fog behelyettesíthető a törzselrendezést.
És itt, amit akarok, Nagyon egyszerűen hozzon létre egy új HTML fájlt.
Nézzük csak adj egy gyors címet.
Add egy blogbejegyzést.
És benne vagyunk Készítünk egy formája.
>> Ez a forma megy, hogy egy akció.
És ez lesz valami hogy helyettesítse a későbbi,
és majd meglátjuk, hogyan routing elfér itt.
De mi csak fogja meghatározni most hogy ez megy a URL útvonal
a createPost.
És akkor ez lesz hogy a módszer post.
Belül van, megyünk hogy a két területen.
Div class = "form-csoport".
>> Mi használja a Bootstrap CSS könyvtár kegyesen által biztosított Twitter.
Így fogunk létrehozni kettő.
Tehát ez az első bemenet lesz a cím.
Tehát input name = "title".
Class = "formcontrol".
Type = "text".
Megyek, hogy adjunk egy helykitöltő = "Cím".
>> És akkor a második pedig lesz egy szövegmezőbe.
Name = "content".
Class = "formcontrol".
És helykitöltő = "Írja ide".
Oda megyünk.
Végül fogunk adjunk hozzá egy gyors küldés gomb.
Type = "submit" class = "Btn gmb elsődleges".
Szóval ezek mind jellemzői bootstrap Tehát
hogy ez lehet megállapítani ki oly módon, hogy ez
áldozatul a felhasználó, ahelyett, meztelenül HTML.
>> Így már meghatározta a vezérlő itt.
Már meghatározott egy nagyon egyszerű néző.
De mi hiányzik a a kötőszövet.
Tehát ezen a ponton, Laravel fogalma sincs arról,
fogunk ténylegesen hozzá vezérlő.
Tehát ez van definiálva, egy nevű fájlt routes.php.
És most, van egy útvonal.
Ami, ha megyünk a Otthon utat ezen a honlapon,
ez meg fog tenni Az index vezérlő.
Tehát itt, mit kell tennünk, van végre egy új útvonalat számunkra, hogy hozzon létre egy post.
>> Így használjuk ezt a módszert kap, amely meghatározza
hogy amikor a felhasználó megpróbálja hogy ezt page-- kifejezetten
A poszt perjel új page-- mit fogunk csinálni
van használja a vezérlő úgynevezett BlogController új álláshely.
Az egyik, hogy most létrehozott.
És akkor megyünk Alias ​​azt newPost.
Megyünk, hogy hozzon létre egy másik feladatát egy kicsit.
De mi itt a A legfontosabb ", mint" az, ami
tudjuk helyettesíteni belül a Penge sablonok.
Tehát most, hadd valójában is mondják útvonalon.
Tehát mi is lesz hogy hozzon létre egy vezérlő
hogy mi is létrehozhatunk ezeket a hozzászólásokat.
Tehát, ha egy felhasználó hozzászólásait az oldalra hozzászólás perjel új, mit fogunk csinálni
van olyan vezérlőt használ, hogy fogunk létrehozni röviddel
nevű BlogController a createPost.
És mi lesz alias ezt az createPost.
Cool.
>> Van még kérdése?
Cool.
Tehát fussunk, amit eddig.
Tehát, ha nem teszünk php kézműves szolgálja, látni fogjuk, sok hibát.
Szóval úgy néz ki, hogy van egy szintaktikai hiba útvonalakon 27. sor.
Ah.
Hiányzó pontosvessző.
Tehát, ha megyünk 8000, látni fogod Itt még nincs semmi.
Tehát ez az alapértelmezett kezdőlapot.
>> De ha megyünk küldeni perjel új, hé.
Ez lesz a formában, hogy most létrehozott.
Most már nem megvalósított funkcionalitás
A amikor megnyomjuk a Küldés gombra.
Tehát, ha kattintson a Submit gombot, hogy fog futni egy hiba.
De mi lesz kód, amely most, pontosan mit is
akarok, ha a felhasználó benyújtja ezt a nyomtatványt.
>> Tehát lássuk, hogy.
Menj vissza a vezérlők fájlt.
Mit fogunk csinálni a ezt az új funkciót
amely lehetővé teszi számunkra, hogy hozzon létre egy post.
Kijelentem, új funkciót.
Nyilvános funkciót createPost.
És ez a funkció lesz kicsit bonyolultabb, mint mi
a miénk volt.
De látni fogod, hogy itt nem vagyunk fog ténylegesen írni a SQL.
Az ORM, az ékes ORM, megy, hogy
számunkra, hogy ezt a néhány módon sokkal elegánsabb megoldást.
>> Így fogunk létrehozni egy új post.
És itt vagyunk példányosítanánk egy új objektumot
A modell, amit csak létre, a poszt modellt.
És mit fogunk csinálni van beállítva a title attribútum ennek segítségével valamit
hogy megkapjuk a szerverről.
Tehát ez hasonló ahhoz, amit miénk volt a CS50 Finance
ahol tennénk, használja a Super Global Hozzászólás keres címet.
>> Tehát Laravel ad némi csatornázás és miegymás ezzel egy segítő funkciót.
Ezért helyette ki ezt is Ennek nagyon egyszerű nyers formában a PHP.
És akkor mit fogunk csinálni beállítása A tartalma a bemenetre, hogy a tartalmak.
Mi történt valójában betakar Ezt egy hasznos funkciója
hogy PHP nevű nl2br, amely Kiderül új vonalak, NLS, a széles, szünetek,
hogy mi is valójában egyes pontjaiban belül.
És végül mit fogunk tennie, hogy mentse ezt a bejegyzést.
Így hívjuk a funkciót spórolni ezt a modellt.
Megyünk, hogy megmentse a post.
És végül mit fogunk csinálni A átirányítja a felhasználót kifejezetten
Az útvonal megyünk hozzon létre röviddel, alias által viewPost.
És megyünk át az érveket id, hogy az id ilyen poszt.
>> Nagy.
Tehát most, ha valóban megy, és futtatni ezt.
Fogunk egy új post.
Mondjuk ez szeminárium 50.
És azt mondják, az biztos.
ADSL.
Bármit.
Valamiféle tartalmat.
És azt benyújtja.
És mi észre, hogy, hé. útvonalak nincs meghatározva.
De ha veszünk egy pillantást phpMyAdmin és keresnek-e vagy sem a funkciót
nem tett semmit.
Nézd meg Blog50 hozzászólások.
Majd észre, hogy, hé.
Sőt, mi nem csak teremt, hogy blog küldeni a időbélyeggel megadott.
>> Tehát most menjünk vissza, és valóban létre ez a másik funkciója a vezérlő,
konkrétan a viewPost vezérlő.
Tehát az állami funkciót viewPost.
Tehát itt, mit teszünk, hanem , hogy üres zárójelek,
mi szeretnénk átadni a azonosítója a poszt, hogy hozunk létre.
És innen mit fogunk csinálni valójában lekérdezi az adatbázist érte.
>> Tehát ha mi közzé, van olyan függvény is
Keresse meg, amely lehetővé teszi számunkra, hogy kérdezd le az azonosító.
Különösen, valóban, fogunk egy alternatív változata ennek a nevezett
Keressen vagy Fail, amely lehetővé teszi számunkra, leszokni ki ezt a funkciót,
dob kivételt, ha a ID adunk át és nem létezik.
És akkor fogunk tenni valamit hasonló ahhoz, amit csinált korábban
ahol mi meg a tartalmat Ezen az oldalon lehet
A renderelt változata az új nézetet amely fogunk létrehozni, blog.view.
>> És mi lesz, hogy bejut it-- csakúgy, mint a CS50 render
function-- a szótár változók.
A kulcsok ennek asszociatív tömb válnak osztályon belül sablon.
Így fogunk tenni poszt post.
Így adja át közvetetten a poszt, hogy amit kérdezni az adatbázisból. .
Most mi megyünk hozz létre ezt a nézetet
hogy mi is valójában megtekintéséhez A blogbejegyzések, hogy már épül.
>> Így fogunk létrehozni nevű fájlt view.blade.php.
Szóval belsejében ez a sablon, mit fogunk csinálni
kerül össze egy egyszerű oldalt lehetővé teszi számunkra, hogy megjelenítse a tartalmat.
Így teszünk a rész, ami előtt a tartalom.
Megállítani.
És mit fogunk tennie belül itt
levelet ki a HTML kódot az oldal megjelenítéséhez.
>> Így fogunk tekerje be egy díszes új HTML5 elemet nevezett cikk.
És itt, megyünk hogy legyen fejléc ahol
fogunk egyszerűen van egy H1, amely magában foglalja a cikk címét.
Tehát itt, ha megnézzük ezt a dupla zárójel jelölést,
ez is megteszi alapvetően PHP echo postai cím.
Tehát ez egy hasznos gyorsírással hogy Laravel biztosít számunkra.
Így fogunk használni Ezzel a jelöléssel helyett.
>> És itt, fogunk is nyomtassa ki annak tartalmát.
És itt, megyünk hogy nem post tartalmát.
És aljára mire vagyunk eredménye, hogy hozzon létre egy lábléc.
És a lábléc, megyünk első kijelzőn, ha ez a kategóriája.
Szóval ez volt kifüggesztett a teremtett meg.
>> És Laravel használ egy igazán szép korszerű könyvtári úgynevezett Carbon.
Tehát valóban tenni valamit az úgynevezett difforHumans, amit korábban látott.
Amikor kiküldték. ez azt fogják mondani: mint öt másodperccel ezelőtt.
Tehát ez egy igazán szép funkcionalitását Laravel.
És végül, megyünk zárni ezt lábléc.
>> Tehát most, ha megyünk vissza Honlap megyünk
hogy itt semmi sem, mert mi nem kódolt fel a honlapon.
De ha megyünk küldeni perjel egy, fogunk látni egy kivétel.
Tudja valaki, hogy miért látunk kivétel?
Mit fogunk hiányzik?
Van ötleted?
Szóval mit csinálunk korábbi számunkra valóban
hogy meghatározza, hogyan jutunk el Különösen vezérlők?
>> 1. Előadó: Az útvonal?
ERIC Ouyang: Igen.
Szóval még mindig meg kell határozni az útvonalat.
Szóval megyünk vissza ide routes.php.
Észre fogod venni, hogy mi nem határozta
hogyan fogunk kapni hogy ez a vezérlő.
Tehát most megyünk határozzák meg ezt az utat.
Ez elég egyszerű, hasonló ahhoz, amit csinált korábban.
De mit fogunk itt megjegyezni hogy mi lesz egy helykitöltő.
>> Tehát, ha nem teszünk route.get perjel utáni ID.
Tehát ID most mi fog átadható a vezérlő.
Ez fogja használni a vezérlő, hogy mi csak
létre, BlogController a viewPost.
És mi lesz alias ezt viewPost.
Nagy.
Tehát most fogunk létrehozni ezt az utat.
>> Tehát most, ha megyünk ide és frissítse az oldalt,
mi tulajdonképpen megvan az új blogbejegyzést.
Tehát ez az, amit korábban létrehozott.
Nagyon egyszerű oldalt, de megjelenik a blogbejegyzést, hogy most létrehozott.
Cool.
És ha valóban menni az egész létrehozásának folyamatát egy új blogbejegyzést,
azt fogja tapasztalni, hogy mindent átirányítja megfelelően.
Ha azt mondom, "Hi.
Én Jonathan Tan. "
Azt mondják, "Ez az én blogbejegyzést."
És azt benyújtja, ez hoz létre Az új blogbejegyzés ID 2,
amely lépésekben, amit kellett korábban, és megjeleníti rendesen.
Félelmetes.
>> Van még kérdése?
Igen?
>> Hangszóró 2: Vajon Laravel fogantyú sanitization és mindent az Ön számára?
ERIC Ouyang: Igen.
Tehát amikor láttuk korábban, amikor tettük input vastagbél vastagbél kap,
hogy sanitates minden SQL injekciók és miegymás
hogy érdemes elvégezni, ha vagyunk egy rosszindulatú felhasználó a honlap.
Tehát Laravel kezeli a sok Az, hogy a színfalak mögött.
Jó kérdés.
>> Szóval vessünk egy pillantást a honlapon.
Tehát, ha az első menj vissza a vezérlő a honlapon,
észre fogod venni, hogy nem sokat itt.
Észre fogod venni, hogy nem vagyunk halad át a vezérlő
semmit, különösen hasznos.
Ez csak az index fájlt.
>> Úgyhogy átjut Ez valami hasznos.
És konkrétan, mi vagyunk megy át a hozzászólásokban.
És Laravel lehetővé teszi számunkra, hogy nem postai úton is, amelyek
lehetővé teszi számunkra, hogy minden a hozzászólások.
Most ha megyünk vissza index.php, látni fogod, hé.
Itt még nincs semmi.
De mit akarunk csinálni itt valójában halad végig,
nem egy foreach ciklus alatt a hozzászólások, lehetővé teszi számunkra, hogy nyomtassa ki a hozzászólás.
>> Tehát foreach álláshellyel poszt, mit akarunk csinálni
a nyomtassa ki a tartalmat A blogbejegyzést.
De egy dolog, észre fogod venni, hogy mi valójában írta a legtöbb, ami code
Már, a view.blade.php.
Szóval, mit fogunk, hogy ténylegesen is használ egy szép hasznos funkciója, Penge
és a Faktor ki ezt a közös kódot.
Így megy itt.
>> Megyünk, hogy ezt a tartalmat itt, és mit fogunk csinálni
hozz létre egy új mappát.
Hívjuk csak akkor felhangok.
És itt, megyünk hogy hozzon létre egy post.blade.php.
Tehát itt, mi tényezőként ki azt a módot, amit szeretnénk megjeleníteni ezeket a hozzászólásokat.
És itt mit fogunk csinálni ahelyett, ténylegesen ilyen HTML közvetlenül,
fogjuk használni ezt az irányelvet nevű közé blog.partials.post.
>> És mit fogunk csinálni itt az át a posztot a lap.
Tehát most ha visszamegyünk Itt fogunk észre, hogy a funkciók még mindig
ugyanaz.
De most itt van ez tényezőként ki kódot, ez a HTML.
Így tudjuk használni az Index.
Tehát itt, ez nagyon egyszerű.
Minden, amit teszünk közé blog.partials.post és tömb.
És valahol előtt, mi poszt post.
>> Tehát most ha visszamegyünk a honlapjához, látni fogjuk, hogy, hé.
Van egy listát az összes blogbejegyzések, hogy a miénk volt.
Lehet, hogy szeretnénk ", ha" feltételeit és a "más" körülmények között
így ha nincs semmit a blog,
szeretnénk megjeleníteni valami hasznosat.
Tetszik, hé.
Nincs tartalmat még a blog.
És ha a srácok tényleg nézd meg Az elosztó kódot GitHub,
akkor megjelenik egy példa arra, hogy hogyan csináljuk ezt.
>> Cool.
Van még kérdése?
Igen.
>> Hangszóró 2: Azt hiszem, csak egy alapvető kérdés.
Vissza az útvonalat.
ERIC Ouyang: Igen.
Ha veszünk egy pillantást útvonalak.
>> Hangszóró 2: Honnan uses.blogcontroller at létre poszt,
Mit is irányít minket, hogy?
ERIC Ouyang: Igen.
Igen.
>> Hangszóró 2: Vagy mi van, hogy--
ERIC Ouyang: Tehát, vessünk egy pillantást, azt mondják, például ez az útvonal itt.
Az első rész a tényleges URL, hogy a felhasználó fog menni.
És ez a tömb van, asszociatív tömb, határozza meg
hogyan szeretné, hogy a alkalmazásával tett eleget azt.
Így használja a vezérlő, A funkció, amit
szeretnénk hívni, ha a használati megy ez az URL.
Tehát viewPost itt volt funkció, amit belül definiált
A BlogController--
>> Hangszóró 2: látom.
>> ERIC Ouyang: --so hogy ténylegesen teszi a céllal,
végezni néhány számítást, kölcsönhatásba az SQL adatbázis.
>> Hangszóró 2: OK.
>> ERIC Ouyang: És akkor a másik része, "mint" egy álnév, amit használunk.
Tehát, ha azt vesszük észre, amikor hoztuk létre a formában,
észre fogod venni, hogy URL :: routecreatePost.
Tehát ez helyettesíti a tényleges URL, hogy nem vagyunk nehéz
kódolási ezeket, így meg tudjuk változtatni Egyszer, azt mondják, ha akarnánk nevezni.
Ehelyett utáni perjel Új, szeretnénk csinálni, mint, p
perjel új, csak hogy tiszta a mi URL egy kicsit.
Szeretnénk változtatni egy helyben, hanem mint az összes különböző fájlokat.
>> Cool.
Ez jó.
Tehát most van egy nagyon alapvető blog platform.
Mi valószínűleg szeretne hozzáadni egy gombot, így hogy mi is valójában létre új bejegyzés.
Tehát, ha vetünk egy pillantást A Layout Master,
van egy ún fejléc jobb hogy most már csak a megfelelő fel a tetején.
Így a későbbiekben gombokat a tetején a fejléc.
>> Tehát, ha megyünk index.blade.php, ténylegesen tennie, hogy meghatározzák, mi megy benne innen.
Tehát ez a fejléc jobb oldalán, mit fogunk csinálni
van hozzá egy gombot, hogy menjen a URL által meghatározott útvonalon új post.
Csak feltakarítani, és ez szép és minden Bootstrap,
fogunk tenni ez az alapértelmezett gomb.
Nézzük csak, hogy ez nagy móka.
>> És benne, tehetnénk egy szöveget.
De mi Bootstrap biztosítja a glyphicons.
Tehát valójában hozzá, hogy Jó ceruza korábban látott.
Glyphicon.
Glyphicon-ceruza.
Szóval ez lehetővé teszi számunkra, hogy terjesszen Egy ikon szöveg helyett.
Ha most abbahagyja, ez a fogja meghatározni ezt a részt.
És, hé.
Van egy szép gombot, hogy összeköt minket közvetlenül a hozzá blogbejegyzést oldalon.
>> Tehát van egy viszonylag egyszerű blog.
Mi adhat cucc hozzá.
De amit általában elvárják a blogok kommentálva.
Szóval ez tényleg fontos számunkra, hogy, azt mondják, ha valaki megnéz egy weboldalt
és nagyon szereti a post, hogy akkor tárgyalásokba bocsátkozni,
Minden személy, aki meglátogatja az oldalt.
Így fogunk menni, és hozzon létre egy új adatbázis asztal és egy új modell
hogy mi lehet társítani hozzászólásainak hozzászólások.
>> Tehát az első lépés, mint azelőtt, az, hogy meg kell futtatni a migráció.
Szóval, mint korábban, amit teszünk php kézműves Migrate: győződjön.
És fogunk létrehozni egyet nevű create_comments_table.
Ez létrehoz egy fájlt amely az új migrációs.
És mi lesz, mint a előtt, meg egy új táblát.
Tehát séma :: hozzon létre egy című táblázat hozzászólás.
Ez a funkció itt.
És ezen belül asztalra, amit fogunk csinálni először,
mint korábban, rendeljen ID.
Növeli ID.
>> Megyünk, hogy a felhasználók társítani nevüket egy külön kommentárt.
Fogunk egy kis tartalom megy ezzel együtt a szöveges tartalom.
És itt mit fogunk tennie, hogy valami mást.
Megyünk, hogy hozzon létre egy egész hogy hívják post_id, amely
fog, jelezve, hogy milyen utólagos Egy adott comment megy.
>> Ezen kívül, mi történt valójában a meg egy idegen kulcs megszorítás ezen.
Tehát MySQL érvényesíti ezt.
Nem akarunk a rendeljen comment száma
5 küldeni 5000, ha mi nem volt 5000 hozzászólás rajta.
Tehát mit teszünk itt, teszünk külföldi post_id
lesz társul Az ID mező az asztalról hozzászólások.
És mi valóban tenni valamit mást segítőkész, a onDelete.
>> Tehát ha töröljön néhány küldeni az adatbázisból,
hogy szeretnénk kaszkád a törli a hozzászólás is.
Mert ez nem túl hasznos számunkra, hogy észrevételeket hozzászólás
amelyek nem léteznek.
És végül, mint korábban, mi vagyunk fogja meg időbélyegző erre.
És mint korábban, megyünk a fordított migráció lesz
elejtette a hozzászólás asztalra.
>> Tehát most ha visszamegyünk hogy itt fogunk
futtatni ezt a migráció, kézműves Migrate.
És most már alkalmazta ezt a migráció, hogy most létrehozott.
Tehát, ha egy pillantást phpMyAdmin, mi, sőt, most
Van egy megjegyzést táblázatot, amely a szerkezet, amit éppen meghatározott.
Szóval, mint korábban, mi vagyunk Készítünk egy új modell
elvonatkoztatni a SQL tábla hogy most létrehozott.
>> Tehát tegyük hozzá egy új fájlt.
Fogunk nevezni comment.php.
És ez valóban lesz elég egyszerű egy kis változás
attól, amit korábban.
Tehát class Comment kiterjed sokatmondó.
És mit fogunk hogy nem itt van meghatározni
hogy az adott funkció a kapcsolata más modellek.
Szóval lesz egy poszt funkciója Itt, hogy visszaadja ezt a kapcsolatot.
Szóval meghatározza, hogy ebben tartozik utáni,
mondják, hogy nincs egy hozzászólás hogy ez a megjegyzés tartozik.
>> Ez valóban kell lennie tőke P a modell.
És most csak a másik flip- oldalán, azt kell mondanunk, hogy, hé.
Hozzászólások megjegyzése.
Szóval, mit fogunk csinálni a meghatározza az állami funkciót hozzászólás.
És itt van vissza Ennek számos megjegyzés.
Tehát most varázslatosan amikor már egy post, tudnánk a tulajdonság hozzászólás
és ez lesz feltölteni azt a információt az adatbázisból.
>> Szóval tényleg megy keresztül, és egy új funkció, hogy véleményünk szerint fájl
hogy így mind megjelenítés és hozzon létre megjegyzéseket.
Így fogunk meghatározni egy új szakaszt.
Nézzük csak külön is egy vízszintes vonalat.
§ id = "hozzászólás".
Mit fogunk csinálni itt van, mint korábban,
halad végig az összes megjegyzést.
Tehát tulajdonképpen hogyan tesszük ezt, Ahogy már említettem, meglehetősen varázslatos.
>> Tesszük hozzászóláshoz.
És akkor mi is ezt mindegyiknél loop az egyes, a megjegyzéseket.
És mi fogunk tennie div class comment,
és megyünk, hogy ténylegesen nyomtassa ki ezt a megjegyzést.
Tehát kiírja, hogy hé, comment name-- személyt
publikáló comment-- mondja dot dot dot.
Megyünk, hogy ezt egy blokkban idézet, csak hogy néz ki.
Majd comment tartalmat idézetblokk.
És foreach.
Tehát most ez lesz a hurok végig a hozzászólás
, amely hozzá van minden egyes az oszlopok
és jelenítse meg a fenti észrevételeket.
Megyek, hogy egy újabb szakaszt le Itt, amely lehetővé teszi számunkra, aki értékeli.
Tehát h3 class.
Egy címet itt.
Add megjegyzést.
És mi lesz meghatározni egy új formája.
>> Szóval, mint korábban, mi vagyunk fog tenni form action.
És itt az új akció vagyunk fogja meghatározni egy új kontroller, hogy
lehetővé teszi számunkra, hogy válaszoljon a hozzászólásra kérelmek létrehozása hozzászólás.
Tehát URL :: útvonalon createComment.
Megyek át a paramétert itt.
Az ID a poszt, hogy hozunk létre megjegyzést.
És akkor ez a módszer formában lesz post.
>> Most megyünk hozzá a a két terület, életforma csoportba.
Ez lesz az input a "Név" és class = "form-ellenőrzés",
type = "text", és a helykitöltő = "Az Ön neve."
Mi is lesz meghatározni másik mezőre, amely
lesz egy szöveges terület a miénk volt.
Csakúgy, mint korábban, hívja a tartalom.
Class = "form-szabályozás."
Placeholder = "Írja ide."
>> És csak azért, hogy valójában azt benyújtja,
benyújtja típusa és class = "Btn gmb elsődleges."
Zárja ki az űrlapot.
Zárd be ezt az intézkedést.
Tehát most, ha frissítse az oldalt, ahol a van, mondjuk, egy adott hozzászólás.
Mi kell újraindítani a szervert.
PHP kézműves szolgálja.
Indítsa újra ezt a.
Meg kell határozni az útvonalat.
De most, nézzük csak ezt ki, hogy mi is valójában megmutatja,
amit az oldal néz ki, és majd mi valóban létre, hogy utat.
Szóval, hé.
Van ez az új formája idelent hogy mi is létrehozhatunk hozzászólás.
Úgyhogy tulajdonképpen meghatározza a funkciója a vezérlő
hogy mi is hozzászóljon.
Menjünk vissza.
És ezen belül blogcontroller.php, mit fogunk csinálni
van egy új funkció nevű létre comment.
>> Nyilvános funkciót createComment.
Ez megy, hogy egy paramétert, az ID a hozzászólás
hogy mi kommentálva.
És mint korábban, mi vagyunk lesz az első kap a post.
Tehát küldeni, findOrfail id.
Utána megyünk hogy hozzon létre egy új megjegyzést.
Tehát comment = Új hozzászólás.
Megjegyzés name = Input :: kap nevet.
Megjegyzés content = azonos új vonal a szünetek az Input :: kap a tartalom.
>> És végül, mi lesz, hogy társítani ezt a megjegyzést a post.
Így fogunk használni Ez a funkció, hozzászólások,
amely lehetővé teszi számunkra, hogy mentse ez a kapcsolat.
Tehát most ez a megjegyzés is automatikusan a poszt ID.
Azt is beállíthatja kézzel, de ez
Több könnyen olvasható, amennyire függvényében megy.
És miután végre ezt, mit akarunk csinálni
van átirányítja a felhasználót a útvonal által meghatározott viewPost
A tömb paraméter a poszt ID.
>> És most, hogy ez valójában funkciók, meg kell adnunk ezt az utat.
Útvonal :: post.
És most mi lesz, hogy hívja ezt postai perjel ID slash comment.
Array használja az új funkció hogy most létrehozott.
BlogController.
CreateComment mint createComment.
Nagy.
>> Tehát most remélhetőleg ha frissítse az oldalt és adjunk hozzá egy megjegyzést, mondjuk, David Malan.
"Remélhetőleg ez működik."
Benyújtására.
Mi, sőt, van egy megjegyzést ezt a blogbejegyzést.
Cool.
Tehát most van egy meglehetősen funkcionális blogbejegyzést.
Mi csak fog adjunk hozzá egy pár csíp, így
hogy van néhány hasznos Ezekről hozzászólások.
>> Tehát, ha visszatérünk a címlapon, nincs értelme
Az, hogy hány hozzászólás van minden egyes ilyen hozzászólások.
Tehát amit mi történt valójában tennie, hogy az agyunkban modell,
meghatározzák a segítő funkció, amely lehetővé teszi, számunkra, hogy adja meg a hozzászólások száma
hogy menjen el egy adott hozzászólás.
Így fogunk létrehozni a segítő funkciót.
>> Nyilvános funkciót.
GetNumCommentsStr.
Tehát egy string számát meghatározó A megjegyzéseket, hogy menjen vele együtt.
És mit fogunk csinálni mondania hogy num = ez a hozzászólás számít.
Így fogunk számolni A hozzászólások száma.
És ha ez a szám értéke 1, mi vagyunk csak most fog visszatérni 1 comment.
És akkor más módon, szeretnénk visszatérni A összefűzése Num és észrevételeit,
így megkapjuk az pluralizálódás helyes.
Csak, hogy ez egy idézet.
Egy megjegyzés.
>> És most tudjuk használni ezt a funkciót közvetlenül belül a nézetünk.
Tehát, ha visszatérünk a részleges hozzászólás, amit teremtett,
most szeretnénk ténylegesen megjeleníti a hozzászólások száma.
Tehát mi nem tehetünk, postai úton, használja ezt a funkciót
hogy mi csak létre, hogy megjeleníti a hozzászólások száma.
Tehát ha most frissíteni, akkor nem, sőt, kijelző
száma hozzászólás hogy menjen vele együtt.
>> Ha akartuk, hogy divatos, ha valóban nézd meg a forgalmazási kódot,
mi is valójában hivatkozó ebben a megjegyzéseket.
Ha felidézzük, mi határozza meg a véli, hogy ez már részben ID hozzászólás.
Tehát, ha valóban akarta kapcsolni közvetlenül a hozzászólások részben, hogy mi
tennénk itt a href URL útvonal viewPost.
Átmenni a tömbben ID utáni ID.
És akkor mi akar menni konkrétan a hozzászólások részben.
>> Itt zárjuk az A tag.
Tehát most, ha frissíteni kell az oldal, akkor kattintson erre.
Elmegyünk közvetlenül A hozzászólások részben.
Ha hosszabb volt a poszt, akkor valóban látni ezt a bounce le.
De észre fogod venni, hogy ez az Nem a lap tetején.
Cool.
Nagy.
Szóval ez egy meglehetősen egyszerű Például valami egyszerű
hogy meg tudod csinálni a Laravel.
>> De akkor megemlítem, hogy Már eddig is sok mindent
meglehetősen kevés kódot.
Laravel lehetővé teszi számunkra, hogy nem a SQL lekérdezés a színfalak mögött.
Ez volt a csatornázás Számunkra a színfalak mögött.
Lehetővé teszi számunkra, hogy nem ezek a kapcsolatok nagyon egyszerű, nem velünk igénylő
hogy nem minden SQL csatlakozni kimutatások össze hozzászólás, amit a hozzászólások.
Lehetővé teszi számunkra, hogy ezt örökségéből sablonok
hogy mi lehet állítani ezeket a fészkelési fájlokat, így mi nem ismétlődő magunkat,
mint amikor volt, hogy kijelzőn a blogbejegyzések
hogy nem kell másolja be a kódot.
>> És innen lehet építeni egyre bonyolultabb alkalmazásokat.
El lehet képzelni, ha volna bevezetni, jelentkezzen be,
mondhatnánk, hogy egy harmadik fél keretet, amely lehetővé teszi számunkra, hogy ezt tegyük.
Van egy csomó őket hogy nagyon, nagyon
Nagyszerű, hogy lehet csinálni, mint, jelszó visszaszerzés.
És akkor küldünk egy Új jelszó megadása email.
Tudjuk végrehajtani engedélye így én is létrehozni egy post,
hanem valaki más nem módosíthatjuk.
Tudjuk végrehajtani funkciót törölni a hozzászólásokat.
>> De itt is látszik, hogy van elég sok minden a kezdetleges alkatrészek
építeni néhány nagyon, nagyon, dinamikus és izgalmas webes alkalmazásokat.
Tehát az, hogy, azt hiszem, jó.
Srácok bármilyen kérdése?
Igen?
>> Hangszóró 3: Hogyan hogy a statikus tartalmat?
>> ERIC Ouyang: Statikus tartalom.
Szóval látta maga előtt, hogy amikor volt Ez itt, ez az elrendezés a tartalom,
Tekintettel make, mi volt ez a e nélkül tömb utána.
Blog.index, mi volt ez a mint csak egy statikus fájl.
Tehát, ha nem adja át semmit mentén rá,
akkor csak teszi a HTML közvetlenül.
De ha átmegyünk ezen asszociatív tömb hozzászólás, amely dinamikusan
húzta az adatbázisból, akkor lehet, hogy az oldal dinamikus.
Cool.
Más kérdés?
Hangszóró 3: Hogyan összehasonlítani Laravel, hogy talán más lehetőségek?
ERIC Ouyang: Persze.
Igen.
Tehát Laravel ez-- ez Nagy question--
egy a sok lehetőség web keretek.
Tehát Ruby on Rails az, amelyik népszerű.
Hiszem Twitter szokott lenni megvalósított Ruby on Rails.
Azt hiszem, hiszen kapcsolva.
Van egy másik nevű FuelPHP.
>> Tehát Ruby on Rails használja a Ruby nyelv és megvalósítja a sok MVC cucc
hogy itt látunk.
FuelPHP egy másik PHP keretrendszer.
Django egyik kedvencem.
Ez egy web keretet Python.
Szóval lehet írni a web app a Python.
Szóval van egy csomó ilyen lehetőség.
>> Laravel, azt hiszem, a és Nagy kedvencem a jobb
Most PHP csak azért, mert A komponensek
hogy beszéltünk korábban.
Ez a Composer engedélyezve.
Ez magában foglalja egy nagyon, nagyon expresszív ORM rendszer.
Is van egy igazán félelmetes sablonrendszer nyelv, amely néhány, a többiek
Csak nem nyújtanak.
És a migráció.
Vándorlások félelmetes is.
Cool?
Félelmetes.
Nos, köszönöm, hogy figyeli ezt a szemináriumot,
és sok sikert a végleges projekt.