[MUSIC JOC] ERIC Ouyang: Salut, toată lumea. Bine ai venit. Acest lucru este Clădire dinamic Web Apps cu Laravel. Numele meu este Eric Ouyang. Sunt un al doilea de studentie studiază științe sociale cu un secundar în informatică, si locuiesc in Adams Casa de aici la Harvard. Deci Laravel, cel mult miezul ei, este un cadru aplicație web MVC. Deci place ceea ce avea voi făcut cu CS50 Finanțelor, Laravel este un cadru care permite te pentru a construi aplicații web dinamice. Astfel încât să puteți gândi la ea în unele sensuri ca o extensie a tipului de lucruri ai făcut în CS50 Finanțe, dar un sistem care este mult mai robust, foarte mult mai elegant, în unele sensuri, și oferă o mulțime de funcționalitate pentru tine pentru a construi destul de complex aplicatii web. Deci, hai sa mergem prin unele dintre caracteristicile cheie, și apoi vom arunca cu capul într-o exemplu de a construi un blog aplicație cu Laravel. Astfel, unul dintre primele lucruri pe care diferențiază de tip MVC de muncă pe care le-am făcut cu CS50 este acesta include un motor ORM. Deci, ORM standuri pentru obiect cartografiere relațională. Deci, acest lucru vă permite să construiască un strat de abstractizare între baza de date și controlere tale. Deci, spre deosebire de CS50 Finanțe în cazul în care a face direct interogări, stratul ORM vă permite să abstract că departe și de a crea modele care sunt mai puternice decât puteți direct cu interogări SQL. Un alt lucru care este într-adevăr de ajutor este șabloane transmisibile. Deci, veți observa în CS50 Finanțe, va ajunge rescrierea o multime de lucruri, în cazul în care ai putea pune potențial refolosirea lucruri, nu ești în stare să. Deci, aici în Laravel, puteți folosi ceea ce este cunoscut ca motorul șablon lamă pentru a crea un aspect maestru. Și de acolo, puteți moșteni astfel încât sub-template-uri poate de fapt include elemente din cadrul că șablon de bază mai mare. Migrația. Deci, aceasta este o caracteristici destul de standard la cele mai multe cadre moderne de aplicații web. Deci, acest lucru vă permite să reprezinte Schimbări schemei bazei de date în cod. Deci, fără să spun, phpMyAdmin, puteți crea de fapt, aceste migrații în cazul în care Reprezentati baza de date schemă se schimbă în cod direct. Și acest lucru vă permite sa-- în special dacă aveți mai multe persoane care lucrează pe același application-- web urmări aceste schimbări, spune în GitHub, sau vreun alt depozit. Deci, aceasta este într-adevăr util și atenuează necesitatea la, să zicem, trece în jurul o mulțime de SQL gropile. Și, în sfârșit, Compozitor este ceva foarte, foarte util care vă permite să utilizați alte cod oamenilor să facă lucruri minunate. Deci, a Laravel structurat ca mai multe pachete compozitor. Deci, spun că dacă ai vrut să aducă într-un pachet de autentificare sau dacă ai vrut să aducă în unele fel de script generator sau un admin interfață, puteți plug and play aceste componente cu compozitorul. Deci să începem. Orice întrebări de la tine baieti Înainte de a începe? Nu întrebări? Se răcește. Deci, primul pas este instalarea Composer. Deci, Compozitor vă permite să gestiona aceste dependențe, fie că este vorba cadrul Laravel sau vreun alt extensie terță parte. Prima comandă permite să descărcați Compozitor, iar cea de a doua comanda va permite sa mutați-l în folderul bin locală astfel încât să puteți rula Composer direct prin terminalul. După aceea, mergeți mai departe și a crea un nou proiect Laravel. Vom fapt de gând să utiliza unele cod exemplu care le-am pus împreună pentru a crea acest blog. Dar, dacă sunteți incepand de la zero, ar trebui să utilizați această comandă aici, compozitor crea proiect, laravel slash laravel, și apoi numele proiectului. Și care va include toate codul distribuție pentru a începe un nou proiect Laravel. Deci, pentru proiectele dvs. CS50 finale, veți Probabil vrea să folosească comanda. Dar vom începe cu asta. Deci, odată ce ați făcut că, vei obține un număr destul de mare de fișiere în blog50. Așa că hai să mergem prin unele dintre aceste componente. Veți observa în acest traseu director, există un dosar aplicație. În interiorul folderul app, nu e un cuplu dosare de ajutor. De notat pentru a începe cu este acest dosar de configurare. Deci stabilește cum aplicația web este O să, să zicem, autentificarea persoane sau lucrurile în numerar sau conectarea la baza de date. Și ce este cu adevarat util este faptul că Laravel vă permite să configurați diferite medii de dezvoltare. Deci, ceea ce am făcut aici este dacă vom merge în folderul local, există un fișier database.php. Și veți observa aici că noi stabili o conexiune MySQL care permite persoanelor fizice pentru a conecta la serverul MySQL care este direct pe aparatul CS50. Și noi conectați la o bază de date că am înființat sunat Blog50. Deci să mergeți mai departe și de fapt rula versiunea de lucru a acestui fapt, doar pentru a obține un sentiment de ceea ce aplicație pe care le construim arată. Deci, am o copie a acest Blog50 finalizat. Deci, de fapt Laravel a construit într-un server pe care le puteți rula direct de la linia de comandă. Deci, aceasta este similar cu PSET înainte atunci când de fapt construi propriul server din C. Așa că au o construit în așa pe care le puteți rula aplicațiile Laravel direct de la linia de comandă. Deci, dacă facem php artizan servi, acest va lansa un server de dezvoltare pe portul 8000. Deci, dacă mergem la local host 8000, veți observa că, hei. Avem blog sus și să fie difuzate nostru. Deci Laravel aici este generatoare de prima pagină a blog-ul nostru. Aplicație foarte simplu. Dar există un cuplu caracteristici foarte puturos că acesta oferă sub capota. Astfel, cererea de blog de simplă. Dacă am vrut să creeze un post, putem să faceți clic pe acel buton. Putem spune, "Hei, toată lumea. Aceasta este o foarte distractiv seminar ", de exemplu. Și scrie ceva aici. Text aici. Dacă ne faceți clic pe Submit, veți observă că noul nostru blog postare a fost adăugat la prima pagină a blog-ul. Dacă ne întoarcem aici, veți observa că au existat unele comentarii deja pe blog. Deci, dacă ne-am defila în jos, veți observați că Jonathan Tan spune că el a fost foarte intrigat de acest post. Deci, vom intra în modul obiect cartografiere relațională permite să faci aceste relații în un mod destul de perfectă, de asemenea. Se răcește. Orice întrebări despre funcționa de ceea ce vom construi? Se răcește. Așa că haideți să începem cu efectiv crearea tabelele bazei de date. Astfel, amintim că în CS50 Finanțe, tu pune împreună un tabel pentru utilizatori precum și pentru stocurile din portofoliul dumneavoastră. Deci, așa cum am menționat mai devreme, ceea ce vom folosi în Laravel este ceva cunoscut sub numele de migrații. Deci, dacă ne întoarcem la cod de distribuție aici, Prima comandă care este de ajutor care Laravel va ofera este această comandă migreze. Deci, putem face php migreze artizan: face. Deci, acest lucru ne permite de a crea o migrare. Și apoi vom dori pentru a crea o migrare numit create_posts_table, care se întâmplă a fi în cazul în care vom fi depozitarea posturi pe blog noastre. Și veți observa aici că rulează prin intermediul unor cod care de fapt generează un fișier cu o ștampilă de timp pe ea. Deci, dacă mergem și privi la baze de date, vom observa sub Migrații că este creat un fișier gol pentru noi care are cod șabloane cu numele că am specificat, crea posturi de masă. Și are două funcții în ea. Up este ceea ce ne dorim să curgă din momentul în migrația este aplicat la baza de date. Și jos este ceea ce vom face atunci când vrem să inverseze un migrației. Deci, aici să începem cu scrierea această migrare. Deci, există o clasă de ajutor în Laravel numit Schema. Deci, vom rula Schema :: crea. Și vom crea un tabel numit posturi. Și aici vom aplica acest lucru, folosind o funcție. Și în aici, vom efectiv precizează conținutul masa noastră. Vom crea un ID, care este auto-incrementare. În plus, vom merge pentru a crea un domeniu care reprezintă titlul post blog-ul nostru. Vom asemenea, va crea un câmp pentru stocarea textul posta blog-ul nostru. Și, în sfârșit, vom pentru a stoca unele marcajele de timp pentru care a fost creat postul nostru și când a fost actualizat. Și pentru în jos, e destul de simplu. Tot ce vrem să facem este derulează tabelul pe care le-am creat. Marea. Orice întrebări? Deci, acum, dacă vom merge mai departe si-- de fapt, gazdă locală, lasă-mă să ștergeți ceea ce am avut mai devreme. Du-te la Baze de date. Am de gând să-l ștergeți ceea ce am avut mai devreme. Aruncă acest lucru și a crea o nouă bază de date Blog50. Deci, acum ce magice parte este aici ca noi pot aplica aceste migrații direct la baza de date folosind linia de comandă instrument. Deci, dacă facem php artizan migra, veți observa că, hei. Este creat tabelul de migrație, care vom arunca o privire la într-un pic, și se aplică această primă migrare. Deci, ne uităm la Blog50, veți observa că este creat două mese pentru noi. În primul rând este acest tabel migrații. Deci, dacă am căuta acest lucru, veți observa că acest tabel este destul de simplă. Se tocmai a spus că, hei. Am aplicat această migrare. Ne întoarcem si uita-te la posturi. Veți observa că structura este exact ceea ce ne-ar fi cerut. Avem un ID de auto-incrementare. Avem un șir de stocare titlul, și un câmp de text pentru stocarea conținutului. Marea. Se răcește. Orice întrebări despre migrații locul de muncă, cum le putem aplica? Nu? Se răcește. Deci, acum vom merge mai departe și de fapt a crea modelul. Așa că doriți să creați un model de posturi care stochează o abstracție a bazei de date. Deci, mai degrabă decât a face interogări MySQL direct, vom crea. Deci, avem de a crea o dosar aici numite modele. Și în interiorul aici, vom a crea un fișier numit post.php. În interiorul acestui fișier PHP, vom crea un post de clasă care se extinde elocvent. Elocvent este numele ORM motor care Laravel oferă. Și aici, ne-am putea aștepta ca de fapt nevoie pentru a scrie un cod. Vom scrie ceva Funcții helper mai târziu. Dar din centru, acest lucru va deja recunoaște ceea ce este în baza de date și putem accesa, spune, textul de nostru blog sau titlul, și de a crea lucruri direct cu destul de mult nici un fel de cod. Deci, asta e una din componentele magice. Și vânt dată această clasă este mai cu drepturi depline, vom include informații despre ceea ce este legată de, așa comentariile. De asemenea, creează o funcție astfel încât să putem efectiv obține direct URL-ul de o pagină blog. Se răcește. Orice întrebări despre asta? Nu. Se răcește. Deci, acum, odată ce vom avea modelul nostru, ne-am doriți să creați un controler care este capabil să interacționeze cu aceste modele, și, ulterior, în baza de date. Deci, dacă ne uităm la BlogController, veți observați că nu e mult aici chiar acum. Tot există un sistem de index care generează pagina de start, dar fără nimic acolo pentru a afișa încă. Deci, prima funcție că vom crea este una care ne permite pentru a crea un post pe blog. Deci, vom declara o Noua funcție numită newPost. Și în interiorul aici pur și simplu, mergem pentru a seta structura aceasta pagina a fi o versiune face, dacă vă amintiți de la CS50, din acest șablon numit blog.new, care vom crea într-un pic. Veți observa aici line șase că am specificat această variabilă, aspect. Și dacă ne uităm la dosarul Vizualizari, există un dosar Layouts, care include un fișier HTML foarte extinsă. Și nota, veți observa că avem această recipient aici că randamentele conținut. Deci, în interiorul șablonul nostru ceea ce vom face este a crea ceea ce va fi substituit în mod direct în acest aspect. Așa că am spus că vrem să face un șablon numit blog.new. Dar interiorul blog, nu e Nu încă acest șablon nou. Deci, vom crea o fișier numit new.blade.php. Acest lucru spune Laravel că acest fișier PHP ar trebui fi redate cu motor șablon lamă. Deci, aceasta este o destul de fișier simplu. Va fi forma prin care vom adăuga de fapt într-o postare pe blog. Deci, magia aici de la moștenire este că, hei. Vrem să se precizeze că secțiune, secțiunea conținut aici, care este delimitat desection șistop. Deci, ce este în între aici se va se înlocuiește în aspectul principal. Și aici ceea ce vrem să facem este foarte simplu crea un nou fișier HTML. Să adăugați un titlu rapid. Adaugă o postare pe blog. Și în aceasta, suntem va crea un formular. Acest formular va avea o acțiune. Și acest lucru va fi ceva pe care le înlocui în mai târziu, și vom vedea cum rutare se potrivește în aici. Dar suntem doar de gând să se definească pentru acum că această merge la un URL cu traseul de la createPost. Și apoi acest lucru se întâmplă a avea metode posta. În aici, vom de a avea două domenii. Clasă Div = "formă-grup". Suntem folosind biblioteca Bootstrap CSS gratie oferite de Twitter. Deci, vom crea două dintre acestea. Deci, această primă intrare este Va fi titlul. Numele Deci intrare = "title". Class = "formcontrol". Tipul = "text". Am de gând să adăugați un substituent = "Titlul". Și apoi al doilea este Va fi o zonă de text. Nume = "conținut". Class = "formcontrol". Și înlocuitor = "Scrie aici". Acolo mergem. În cele din urmă, vom adăuga un buton rapid prezenta. Tipul = "submit" class = "BTN btn-primar". Deci, acestea sunt toate caracteristici ale Bootstrap așa că acest lucru poate fi pus într-un mod care este pradă pentru utilizator, mai degrabă decât HTML gol. Deci, ne-am definit regulatorul aici. Am definit o vedere foarte simplu. Dar ceea ce lipsește este țesutul conjunctiv. Deci, la acest moment, Laravel nu are nici o idee cum vom efectiv accesa acest controller. Deci, acest lucru este definit într-un fișier numit routes.php. Și acum, avem o rută. Care este atunci când vom merge la cale acasă pentru acest site, se va face controlerul index. Deci, aici avem nevoie facem este să pună în aplicare un nou traseu pentru noi, pentru a crea un post. Deci, vom folosi această metodă obține, care specifică că, atunci când un utilizator încearcă să obține acest page-- specific in bara slash nou page-- ceea ce vom face este utiliza controlerul numit BlogController mesaj nou. Cel care tocmai am creat. Și apoi mergem să-l alias ca newPost. Vom crea un alt Funcția într-un pic. Dar ce e aici, sub tasta "ca" este ceea ce putem înlocui în șabloanele noastre blade. Deci, pentru moment, să de fapt spune, de asemenea traseu. Deci, vom merge, de asemenea, pentru a crea un controler astfel încât să putem crea aceste posturi. Deci, dacă un utilizator de posturi la postul pagina slash nou, ceea ce vom face este foloseste un controller care vom crea în scurt timp numit BlogController la createPost. Și vom alias aceasta cu drept createPost. Se răcește. Orice întrebări? Se răcește. Deci, haideți să ruleze ce avem până acum. Deci, dacă facem php artizan servi, vom vedea o mulțime de erori. Deci, se pare ca avem o eroare de sintaxă pe rute linia 27. Ah. Lipsește un punct și virgulă. Deci, dacă mergem la 8.000, veți vedea nimic încă aici. Deci, aceasta este pagina de pornire implicită. Dar dacă vom merge pentru a posta reduce nou, hei. Va fi forma pe care tocmai am creat. Chiar acum, noi nu avem implementat funcționalitatea de când am apăsați butonul Submit. Deci, dacă facem click pe Submit buton, se va executa o eroare. Dar vom cod care chiar acum, exact ceea ce ne-am vrea să facă atunci când un utilizator susține acest formular. Așa că hai să facem asta. Du-te înapoi la dosar Controllers. Ceea ce vom face este pune în aplicare această nouă funcție care ne permite să creați un post. Constatarea nouă funcție. Funcția createPost public. Și această funcție va fi un pic mai sofisticat decât ceea ce am avut înainte. Dar veți vedea aici că nu suntem O să scrie de fapt orice SQL. ORM, elocvent ORM, va permite ne să facem acest lucru în unele modalități un mod mai elegant. Deci, vom crea un nou post. Și aici suntem instantierea un nou obiect de la modelul pe care tocmai am a creat, modelul post. Și ce vom face este setat titlu atribut de acest lucru, folosind ceva pe care le primesc de la server. Deci, acest lucru este similar cu ceea ce am avut înainte în CS50 Finanțe în cazul în care ne-ar face, folosind Super Global Publica cautati titlu. Deci Laravel prevede unele salubritate și fleacuri folosind această funcție ajutor. Așa că ar prefera să folosească acest loc din acest formular crud foarte extinsă de PHP. Și apoi ce vom face este setat conținutul de ea pentru a obține de intrare conținut. Vom fapt de gând să-și încheie acest lucru într-o funcție de ajutor că PHP oferă numit nl2br, care apoi noi linii, NLS, în lat, pauze, astfel încât să putem avea de fapt diferite paragrafe din interiorul acestuia. Și, în sfârșit ceea ce vom să faceți este să salveze acest post. Așa că am apela funcția salva pe acest model. Vom salva postul. Și, în sfârșit ceea ce am de gând să faci este redirecționa utilizatorul specific la traseul pe care am de gând să crea în scurt timp, alias de viewPost. Și vom trece în argumentele id, fiind id-ul acestei postare nouă. Marea. Deci, acum, dacă vom merge de fapt, și a alerga acest lucru. Vom adăuga un nou post. Să spunem că acest lucru este seminar 50. Și spune, sigur. ASDL. Tot Ceea Ce. Un fel de conținut. Și Submit. Și vom observa că, hei. rute nu este definit. Dar dacă ne uităm la phpMyAdmin și uita-te pentru chiar funcția noastră a făcut nimic. Uită-te la posturi Blog50. Vom observa că, hei. De fapt, ne-am creat doar că blog posta cu marcajele de timp după cum se specifică. Acum să ne întoarcem și să creeze efectiv această altă funcție în controlor nostru, în special controlerul viewPost. Funcția viewPost Deci publice. Deci, aici ce vom face, în schimb de a avea paranteze goale, vom dori să treacă în ID-ul de postul pe care le creăm. Și de aici ceea ce am de gând să faci este de fapt interoga baza de date pentru el. Deci, dacă facem posta, există o funcție numită Găsiți care ne permite sa-l interoga ID. Mai exact, de fapt, vom utilizați o versiune alternativă a acestui numite Găsiți sau nu, ceea ce ne permite să renunțe din această funcție, arunca o excepție dacă ID-ul trecem în nu există. Și apoi vom face ceva similar cu ceea ce am făcut mai devreme în cazul în care ne-am stabilit conținutul din aceasta pagina pentru a versiunea prestate de aceasta noua viziune care vom crea, blog.view. Și vom trece în it-- la fel ca în CS50 face function-- un dicționar de variabile. Cheile de acest tablou asociativ deveni variabile în șablonul. Deci, vom face mesaj Publică. Deci, treci indirect in bara care ne-am întrebat din baza de date. . Acum, ce vom faceți este să creați acest punct de vedere astfel încât să putem vedea de fapt posturile pe care le-am construit blog. Deci, vom crea o fișier numit view.blade.php. Deci, în interiorul acestui model, ceea ce vom face este pus împreună o pagină simplu care ne permite pentru a afișa conținutul. Deci, ce facem secțiune, asta e înainte conținut. Stop. Și ce vom să facă în aici este scrie unele HTML pentru a afișa această pagină. Așa că o să-l încheie cu o fantezie element nou HTML5 numit articolul. Și aici, mergem pentru a avea un antet în care vom avea pur și simplu o h1, care include titlul poștă. Deci, aici, dacă ne uităm la acest dublu notație acoladă, acest lucru va face, în esență, PHP ecou după titlu. Deci, este o prescurtare de ajutor care Laravel ne ofera. Deci, vom utiliza această notație în schimb. Și aici, vom, de asemenea, imprima conținutul ea. Și aici, mergem pentru a face conținutul posta. Și în jos în partea de jos ceea ce suntem O să faceți este să creați un subsol. Iar în subsol, vom prima afișare când acest lucru a fost postat. Deci, acest lucru a fost postat la, creat la. Și Laravel foloseste un foarte frumos bibliotecă data numit Carbon. Deci, putem face de fapt ceva numit difforHumans, care ați văzut mai devreme. Când ne-am postat. ea va spune, cum ar fi, acum cinci secunde. Deci, aceasta este o foarte frumos funcționalitatea de Laravel. Și, în sfârșit, vom pentru a închide acest subsol. Deci, acum, dacă ne întoarcem la Home Page mergem pentru a vedea nimic încă aici, deoarece nu am codat sus a paginii de start. Dar dacă vom merge pentru a posta un slash, vom vedea o excepție. Stie cineva de ce vom vedea o excepție? Ce ne lipsește? Orice idei? Deci, ce ne-am face mai devreme pentru noi de fapt pentru a defini cum ajungem să special controlere? SPEAKER 1: Traseul? ERIC Ouyang: Da. Deci, tot trebuie să definească traseul. Deci ne întoarcem aici pentru a routes.php. Veți observa că ne-am nu au de fapt definit cum vom obține la acest controller. Deci, acum vom defini acest traseu. E destul de simplu, similar cu ceea ce am făcut mai devreme. Dar ce vom observa aici este că vom avea un înlocuitor. Deci, dacă facem route.get după slash ID. Deci, ID-ul acum este ceea ce se întâmplă la fi trecut în controlerul. Acest lucru se întâmplă de utilizat controlor că ne-am a creat, BlogController la viewPost. Și am de gând să alias acest lucru ca viewPost. Marea. Deci, acum vom crea această rută. Deci, acum, dacă vom merge aici și reîmprospăta această pagină, noi de fapt avem noi postare pe blog. Deci, asta este ceea ce am creat mai devreme. Foarte pagina simplu, dar afișează blog pe care tocmai am creat. Se răcește. Și dacă am merge de fapt, prin întregul proces de creare a unui nou post pe blog, vom observa că tot redirecționează în mod corespunzător. Dacă spun, "Bună. Sunt Jonathan Tan. " Spune: "Acesta este meu post pe blog." Și îl transmite, aceasta va crea acest nou post pe blog cu ID-ul 2, care trepte, de la ceea ce am avut anterior și îl afișează corespunzător. Minunat. Orice întrebări? Da? SPEAKER 2: Are mâner Laravel igienizare și totul pentru tine? ERIC Ouyang: Da. Așa că atunci când am văzut mai devreme, atunci când am facut de intrare colon colon ajunge, că sanitates orice SQL preparate injectabile și fleacuri că am putea dori pentru a efectua dacă suntem un utilizator rău intenționat a site-ului. Deci Laravel ocupă mult din care în spatele scenei. Bună întrebare. Deci, haideți să aruncăm o privire la pagina de start. Deci, dacă mergem mai întâi înapoi la controler pentru pagina de pornire, veți observa că aceasta nu face mult aici. Veți observa că nu suntem asociate în acest controller nimic deosebit de util. E doar acest fișier index. Așa că haideți să treacă în aceasta ceva util. Și în mod special, suntem O să treacă în posturi. Și Laravel ne permite pentru a face poștă tuturor, care ne va permite pentru a obține toate posturile. Acum, dacă ne întoarcem la index.php, veți vedea, hei. Nimic încă aici. Dar ceea ce vrem să facem aici este, de fapt repeta prin, face o buclă foreach pe posturile care ne permite să imprimați posturi. Posturi Deci foreach fi poștă, ceea ce vrem să facem se imprima conținutul de la postul de pe blog. Dar un lucru pe care veți observa este că noi de fapt scris cele mai multe din acest cod deja, în view.blade.php. Deci, ce vom face de fapt este utilizați o caracteristică frumos util Blade și factor acest cod comun. Așa că du-te aici. Vom lua acest conținut chiar aici, și ce vom face este crea un nou dosar. Să-i spunem parțiale. Și aici, mergem pentru a crea un post.blade.php. Deci, aici, ne-am luat din drum în care ne-o dorim pentru a afișa aceste posturi. Și aici ce vom face în loc de având în fapt, că HTML direct, vom utiliza această directivă, numita includ blog.partials.post. Și ce vom face aici este trece în postul a paginii. Deci, acum, dacă ne întoarcem aici, vom observați că funcționalitatea este încă aceeași. Dar acum avem această luat în cod, aceasta HTML. Deci, putem folosi în Index. Deci, aici, acest lucru este foarte simplu. Tot ce facem este să includă blog.partials.post și matrice. Și undeva la înainte, să facem mesaj Publică. Deci, acum, dacă ne întoarcem la Pagina de start, vom vedea că, hei. Avem o listă a tuturor posturi pe blog că le-am avut înainte. Am putea dori să adăugați câteva "dacă" Condiții și condițiile "altceva" astfel încât, dacă nu avem nimic pe blog, vrem să afișeze ceva util. Cum ar fi, hei. Nu e nici un conținut încă pe blog. Și dacă voi uita de fapt la codul de distributie pe GitHub, veți vedea un exemplu de cum putem face asta. Se răcește. Orice întrebări? Da. SPEAKER 2: Cred doar o întrebare fundamentală. Înapoi la traseul. ERIC Ouyang: Da. Dacă ne uităm la rute. SPEAKER 2: În cazul în care nu uses.blogcontroller la a crea poștă, ce ne direct la? ERIC Ouyang: Da. Da. SPEAKER 2: Or ceea ce este that-- ERIC Ouyang: Deci, să ia o privire, spune de exemplu, această cale chiar de aici. Prima parte este real URL-ul pe care utilizatorul va merge la. Și această matrice de aici, tablou asociativ, definește cum ne-am dori să avem cerere act ca răspuns la ea. Deci, folosește este operatorul, funcția pe care noi doriți să o apelați când un utilizator merge la această adresă URL. Deci, viewPost chiar aici a fost o Funcția pe care am definit interior de BlogController-- SPEAKER 2: Văd. ERIC Ouyang: --so pe care le poate face de fapt un punct de vedere, efectua unele calcule, interacționează cu baza de date SQL. SPEAKER 2: OK. ERIC Ouyang: Și atunci de altă parte parte, "ca" este un alias pe care le folosim. Deci, dacă vom observa atunci când am creat forma, veți observa că URL :: routecreatePost. Deci, l substituie în real URL-ul, astfel încât nu suntem greu codificare acestea în așa putem schimba odată, spun că dacă am vrut să-l redenumiți. În loc de post-slash noi, vrem să facem ca, p slash nou doar pentru a curăța la URL-uri noastre un pic. Ne-ar schimba într-un singur loc, mai degrabă decât în ​​toate diferite fișiere. Se răcește. Asta e bine. Deci, acum avem o foarte platformă blog de bază. Probabil că doriți să adăugați un buton așa că putem crea de fapt posturi noi. Deci, dacă ne uităm la Layout Maestru, avem o secțiune numită antet pe dreapta că tocmai am definit până la partea de sus. Deci, putem adăuga butoane pentru partea de sus a antetului. Deci, dacă mergem la index.blade.php, de fapt faci este definirea a ceea ce se în interiorul aici. Deci, această secțiune Antet pe dreapta, ceea ce vom face este să adăugați un buton pentru a merge la URL-ul este definit de cale postul nou. Doar să-l curețe și să facă ea destul de și toate Bootstrap, vom face acest buton o implicit. Să fac mare pentru distractie. Și în interiorul ei, am putea pune un text. Dar ce Bootstrap ofera este glyphicons. Deci, putem adăuga efectiv în creion frumos că am văzut mai devreme. Glyphicon. Glyphicon-creion. Deci, acest lucru ne va permite să pună într-o icoană în loc de text. Acum, dacă facem opri, acest va defini această secțiune. Și, hei. Avem un buton frumos care ne leagă direct adăuga o pagină blog. Deci, avem un blog destul de simplu. Putem adăuga lucruri la el. Dar ce ne asteptam în general de la bloguri este comentarea. Deci, este foarte important pentru noi să avem, spune, dacă altcineva vizitează un site web și îi place într-adevăr postul care ele pot angaja în discuții cu alte persoane care vizitează pagina. Deci, vom merge și de a crea o nou tabel de baze de date și un nou model de astfel încât să putem asocia Comentariile cu posturi. Deci, primul pas, la fel ca înainte, este că avem nevoie pentru a rula o migrație. Deci ca înainte, să facem php artizan Migrarea: face. Și vom crea o numit create_comments_table. Aceasta va crea un fișier care are noul nostru migrației. Și vom, cum ar fi înainte, să definească un nou tabel. Deci Schema :: crea o tabel numit comentarii. Această funcție aici. Și în interiorul acestui tabel ce vom face este în primul rând, ca înainte, atribui un ID. Creșterile de identitate. Vom permite utilizatorilor să asocieze numele lor cu un anumit comentariu. Vom avea unele conținut care merge împreună cu aceasta, conținut text. Și aici ceea ce am de gând să face este ceva diferit. Vom crea un număr întreg care se numește post_id care va semnifica ceea ce postare un anumit comentariu merge cu. În plus, vom fapt de gând să stabilit o constrângere cheie externă în acest sens. Deci, MySQL va impune asta. Noi nu încercăm să atribui numărul comentariu 5 pentru a posta 5.000 dacă nu am a avut 5.000 de posturi pe ea. Deci, ceea ce facem aici, facem post_id străine va fi asociată cu câmpul ID din posturile de masă. Și vom face de fapt ceva mai util, este onDelete. Deci, dacă am șterge unele publica din baza de date, că vrem să CASCADE șterge pentru comentarii, de asemenea. Pentru că nu e de mare ajutor pentru noi să avem comentarii cu privire la posturile că nu există. Și, în sfârșit, la fel ca înainte, suntem O să setați timbre de timp în acest sens. Și la fel ca înainte, vom au fie migrația inversă cădere masa comentarii. Deci, acum, dacă ne întoarcem aici, mergem pentru a rula această migrare, artizan migreze. Și acum se aplică acest migrația că tocmai am creat. Deci, dacă ne gasiti phpMyAdmin, facem, de fapt, acum au un comentarii tabel care are structură care ne-am specificat. Deci ca înainte, suntem va crea un nou model de la abstract tabelul SQL că tocmai am creat. Deci, haideți să Adaugă un nou fișier. Vom numi comment.php. Și acest lucru este, de fapt va fi destul de simplu cu o ușoară schimbare din ceea ce am avut înainte. Deci clasă comentariu extinde Elocvent. Și ce vom de a face aici este să definească o funcție care este relație cu alte modele. Deci, vom avea o funcție postare aici că revine această relație. Deci, suntem precizând că acest apartine posta, spunând că există un post că acest comentariu aparține. Acest lucru trebuie să fie de fapt de capital P pentru modelul. Și acum doar pe de altă clapa parte, trebuie să spunem că, hei. Posturi avea comentarii. Deci, ce vom face este defini comentarii funcții publice. Și aici este returnat acest lucru are multe comentarii. Deci, acum magic atunci când avem un post, putem obține comentarii atribut și-l vom popula cu informații din baza de date. Deci, haideți să mergem de fapt prin și adăuga o nouă caracteristică pentru a vizualiza fișiere nostru astfel încât să putem afișaj și de a crea comentarii. Deci, vom defini o nouă secțiune. Hai să-l separa cu o regulă orizontală. Secțiunea id = "comentarii". Ceea ce vom face aici este, ca înainte, repeta prin toate comentariile. Deci, de fapt, cum putem face acest lucru este, așa cum am menționat, destul de magic. Noi facem posta comentarii. Și atunci putem face acest lucru pentru fiecare bucla peste fiecare dintre comentarii. Și ce vom face este de clasa div comentariu, și vom efectiv imprima acest comentariu. Deci, arata ca hei, comentariul name-- persoana care a postat acest comment-- spune punct punct punct. Vom pune asta într-un bloc citat, doar pentru a face să arate frumos. Și apoi comenta continutul citat bloc. Și foreach. Deci, acum acest lucru se întâmplă la bucla prin toate comentariile care este asociat cu fiecare dintre posturile și afișa fiecare dintre aceste observații. Am de gând să adăugați o altă secțiune jos aici, ceea ce ne permite să adăugați un comentariu. Deci, clasa H3. Pune un titlu aici. Adaugă un comentariu. Și vom defini o nouă formă. Deci ca înainte, suntem de gând să faci formă de acțiune. Și aici, noul acțiunea este că suntem O să definească un nou controler care ne permite să răspundă la a posta cererile pentru crearea comentarii. Deci URL :: traseu createComment. Am de gând să treacă în parametrul aici. ID-ul de post care suntem crearea comentariu pe. Apoi procedeul conform prezentei formular va fi după. Acum vom adăuga în o două câmpuri, grup formular. Acest lucru va fi o intrare cu numele "nume" și class = "control formă", type = "text", și cu înlocuitor = "Numele tau". Vom asemenea, va defini un alt câmp de formular, care va fi un text zonă așa cum am avut mai înainte. La fel ca înainte, numesc conținut. Class = "formă de control." Substituent = "Scrie aici." Și așa încât noi poate de fapt îl prezintă, să prezinte tip și de clasă = "BTN btn-primar." Închideți formularul. Închideți această acțiune. Deci, acum, dacă ne reîmprospăta această pagină în cazul în care avem, să zicem, un anumit post. Trebuie să reporniți serverul. PHP artizan servi. Reporniți asta. Trebuie să definim ruta. Dar pentru moment, hai să profite de această în așa fel încât să vă putem arăta de fapt ceea ce pagina arata ca, și apoi vom crea de fapt ruta. Deci, hei. Avem această nouă formă jos aici astfel încât să putem crea comentarii. Deci, haideți să definim de fapt o Funcția în cadrul controller astfel încât să putem adăuga comentarii. Să ne întoarcem. Și în blogcontroller.php, ceea ce vom face este a crea o nouă funcție numita crea comentariu. Funcția createComment public. Acest lucru va avea un singur parametru, ID-ul de posturi că suntem comentând. Și la fel ca înainte, suntem mergi la a lua primul post. Deci a posta, findOrfail id. Apoi, vom pentru a crea un nou comentariu. Deci, comentariul = nou comentariu. Comentariu name = Intrare :: primi numele. Conținut = aceeași linie noua în pauze de intrare :: obține conținut. Și, în sfârșit, vom avea la asocia acest comentariu cu postul. Deci, vom utiliza această funcție, comentarii, care ne permite să salvați această relație. Deci, acum acest comentariu va avea automat după ID. De asemenea, ar putea stabili manual, dar acest lucru este mai ușor de citit, în măsura ca funcția merge. Și după ce am efectua acest lucru, ceea ce vrem să facem este redirecționa utilizatorul cu privire la traseu specificat de viewPost cu matrice cu parametru de post ID. Și acum, astfel încât această efectiv funcții, trebuie să definim acest traseu. Route :: poștă. Și acum vom apela acest după slash slash ID comentariu. Array utilizează noua funcție că tocmai am creat. BlogController. CreateComment ca createComment. Marea. Deci, acum sperăm, dacă vom reîmprospăta această pagină și se adaugă într-un comentariu, să zicem, David Malan. "Sperăm că această fabrică." Trimite. Noi, de fapt, au un comentariu pe acest blog post. Se răcește. Deci, acum avem o destul de funcțional post pe blog. Noi doar de gând să adăuga câteva trucuri așa că avem ceva mai util informații cu privire la aceste posturi. Deci, dacă ne întoarcem la pagină bară, nu avem nici un sens de câte comentarii sunt pe fiecare dintre aceste posturi. Deci, ce vom merge de fapt sa faci este, în interiorul modelul nostru, defini o functie helper, care permite ne pentru a specifica numărul de comentarii care merge cu un anumit post. Deci, vom crea o funcție helper. Funcția publică. GetNumCommentsStr. Deci, un șir care specifică numărul de comentarii care merg împreună cu ea. Și ce vom face este spus care num = acestui comentarii conta. Deci, vom conta numărul de comentarii. Și dacă acest număr este egal cu 1, suntem doar de gând să se întoarcă 1 comentarii. Și apoi în caz contrar, ne-am dori să se întoarcă concatenarea Num și comentarii, asa ca am obține pluralizarea corect. Doar asigurați aceasta o singură ofertă. Un comentariu. Și acum putem folosi această funcție direct în interiorul de punctul nostru de vedere. Deci, dacă ne întoarcem la posturi parțiale care le-am creat, acum vrem să efectiv afișa numărul de comentarii. Deci, ce putem face este poștă, utilizați această funcție care tocmai am creat la afișa numărul de comentarii. Deci, dacă acum ne refresh, ea nu, de fapt, de afișare comentariile număr care merge împreună cu ea. Dacă am vrut să fie fantezie dacă de fapt, uita-te la codul de distribuție, putem lega de fapt acest lucru comentariile. Dacă vă amintiți, am definit în cadrul vezi că această secțiune are observații de identitate. Deci, dacă de fapt am vrut să lege direct la secțiunea de comentarii, ceea ce vom face aici este un href URL-ul de viewPost traseu. Treceti in ID-ul matrice post de identitate. Și apoi ne-am dori să mergem la în special secțiunea de comentarii. Aici sa închide o etichetă. Deci, acum, dacă ne reîmprospăta această pagină, facem click pe acest. Vom merge direct la secțiunea de comentarii. Dacă am avea un post mai lung, puteți a se vedea de fapt acest saritura jos. Dar veți observa că este nu în partea de sus a paginii. Se răcește. Marea. Deci, asta e un destul de simplu exemplu de ceva simplu pe care le puteți face cu Laravel. Dar se poate observa aici că am făcut o mulțime de lucruri cu o cantitate destul de mică de cod. Laravel ne permite să facem Interogări SQL în spatele scenei. Aceasta nu salubritate pentru noi în spatele scenei. Ne permite să facem aceste relații foarte ușor fără a avea nevoie de noi de a face orice SQL alătura declarații combină comentariile cu ceea ce posturile. Ne permite să facem acest lucru moștenire de template-uri astfel încât să putem defini aceste cuiburi Fișierele deci nu suntem noi înșine repeta, la fel ca atunci când am avut acea de afișare a posturilor blog că noi nu trebuie să copiați și inserați codul. Și de aici se poate construi aplicații din ce în ce complicate. Vă puteți imagina dacă ne a vrut să pună în aplicare log-in, am putea spune, aduce un terț cadru care ne permite să facem acest lucru. Există o grămadă de ele că sunt într-adevăr, într-adevăr mare, care poate face ca, de recuperare a parolei. Și să-ți o trimite reseta parola de e-mail. Putem implementa permisiune astfel încât să pot crea un post, dar altcineva nu o poate edita. Putem pune în aplicare funcționalitate a șterge mesajele. Dar puteți vedea aici că avem destul de mult toate componentele rudimentare pentru a construi ceva într-adevăr, într-adevăr, dinamice și interesante aplicații web. Deci, cu asta, cred că suntem bine. Nu voi aveți orice întrebări? Da? SPEAKER 3: Ce părere aveți obține conținut static? ERIC Ouyang: conținut static. Deci, ai văzut înainte că atunci când am avut acest drept aici, acest conținut aspect, vedere marca, am avut această fără această matrice după aceea. Blog.index, am avut această ca doar un fișier static. Deci, dacă nu trece nimic de-a lungul acesteia, se va face doar HTML direct. Dar dacă vom trece în această asociativ matrice de posturi, care este dinamic tras din baza de date, am poate face pagina de dinamic. Se răcește. Orice alte întrebări? SPEAKER 3: Cum te-ai compara Laravel poate la alte opțiuni? ERIC Ouyang: Sigur. Da. Deci Laravel este-- asta e un mare question-- una dintre mai multe opțiuni pentru cadre web. Deci, Ruby on Rails este una care e popular. Cred că Twitter folosit pentru a fi implementat cu Ruby on Rails. Cred că am pornit de la. Mai este unul numit FuelPHP. Deci, Ruby on Rails folosește limbajul Ruby și pune în aplicare o mulțime de lucruri MVC pe care o vedem aici. FuelPHP este un alt cadru PHP. Django este una din preferatele mele. Este un cadru web pentru Python. Astfel, puteți scrie aplicația web în Python. Deci, există o grămadă de aceste opțiuni. Laravel, cred, de și mare este dreptul meu favorit acum pentru PHP doar pentru că a componentelor despre care am vorbit mai devreme. E Compozitor activat. Acesta include un foarte, foarte sistem ORM expresiv. De asemenea, are un templating cu adevărat minunat Limba că unele dintre celelalte pur și simplu nu oferă. Și migrații. Migrații sunt minunat, de asemenea. Cool? Minunat. Ei bine, mulțumesc foarte mult pentru uitam acest seminar, și noroc pe proiectele finale.