[Muziek] ERIC Ouyang: Hey, iedereen. Welkom. Dit is het bouwen van dynamische Web-apps met Laravel. Mijn naam is Eric Ouyang. Ik ben een tweedejaars bestuderen van sociale studies met een secundaire in de informatica, en ik woon in Adams Huis hier op Harvard. Dus Laravel, in zijn meest kern, is een MVC web applicatie framework. Dus graag wat jullie hebben gedaan met CS50 Financiën, Laravel is een kader dat toelaat u op te bouwen dynamische webapplicaties. Zo kunt u denken aan het in sommige opzichten als een uitbreiding van het soort dingen je hebt gedaan in CS50 Financiën, maar een systeem dat is veel robuuster, veel meer elegant in sommige opzichten, en geeft veel functionaliteit voor u om vrij complex te bouwen webapplicaties. Dus laten we gaan door een aantal van de belangrijkste kenmerken, en dan gaan we duiken in een voorbeeld van het bouwen van een blog applicatie met Laravel. Dus een van de eerste dingen die onderscheidt het van MVC soort werk dat je hebt gedaan met CS50 is het omvat een ORM-motor. Dus ORM staat voor object relational mapping. Hiermee kun je dus op te bouwen een abstractielaag tussen de database en uw controllers. Dus in tegenstelling tot in CS50 Finance waar u direct te maken queries, de ORM laag kunt u abstract dat weg en creëren modellen die zijn krachtiger dan je kunt direct met SQL queries. Een ander ding dat is echt behulpzaam is erfelijk sjablonen. Dus je zult merken in CS50 Financiën, je uiteindelijk het herschrijven van een heleboel dingen, waar plaatst je kon potentieel dingen hergebruiken, je bent niet in staat om. Dus hier in Laravel, kunt u gebruik maken van wat er bekend als het blad template engine om een ​​master-out te creëren. En van daar, kunt u erven zodat de sub-templates kan eigenlijk omvatten elementen binnen dat grotere basissjabloon. Migratie. Dus dit is een vrij standaard functies op de meeste moderne web applicatie frameworks. Hiermee kun je dus te vertegenwoordigen database schema wijzigingen in de code. Dus zonder het gaan om te zeggen, phpMyAdmin, je kunt eigenlijk maken deze migraties waar u de database vertegenwoordigen schema verandert in de code direct. En dit laat je vooral to-- als je meerdere mensen die werken op dezelfde webpagina application-- volgen deze veranderingen, zeggen in GitHub, of een andere repository. Dus dit is echt nuttig en vermindert de noodzaak naar, zeg, pas rond een heleboel SQL dumpt. En tot slot, Composer is iets echt, echt nuttig die u toelaat om andere te gebruiken mensen code om vreselijke dingen te doen. Dus Laravel's gestructureerd als verschillende componist pakketten. Dus zeggen dat als je wilde brengen in een authenticatie-pakket of als je wilde brengen in wat soort generator script of een admin interface, kunt u plug and play die componenten met Composer. Dus laten we beginnen. Eventuele vragen van u jongens voordat we aan de slag? Geen vragen? Cool. Dus de eerste stap het installeren van Composer. Dus Composer kunt u beheer van deze afhankelijkheden, of het nu de Laravel kader of een andere derde partij extensie. Het eerste commando maakt u Composer downloaden en het tweede commando kunt u beweeg het in uw lokale map bin zodat u Composer kan draaien rechtstreeks via de terminal. Na dat, ga je gang en maak een nieuw Laravel project. We zijn eigenlijk gaan gebruik wat voorbeeldcode die ik bij elkaar heb gezet om deze blog te maken. Maar als je begint uit kras, zou u deze opdracht gebruikt hier, componist creëren-project, laravel slash laravel, en dan de naam van uw project. En dat onder meer alle verdeelsleutel voor het starten van een nieuw Laravel project. Dus voor uw CS50 laatste projecten, zult u waarschijnlijk willen dat commando te gebruiken. Maar we gaan beginnen met deze. Dus als je eenmaal hebt gedaan dat, je gaat krijgen een vrij uitgebreide nummer van bestanden in blog50. Dus laten we gewoon gaan door sommige van deze componenten. U zult merken op deze route directory, is er een app map. In de map app, er is een paar nuttig mappen. Van de nota om te beginnen met is dit config map. Dus dit zet hoe uw web-applicatie is gaan naar, zeg, authenticeren mensen of contante dingen of verbinding met de database. En wat echt behulpzaam is dat Laravel hiermee kunt u het opzetten van verschillende ontwikkelomgevingen. Dus wat we hier hebben gedaan is als We gaan onder de lokale map, er is een database.php bestand. En je zult hier opmerken dat wij het opzetten van een MySQL verbinding die maakt individuen te verbinden met de MySQL server die is direct op de CS50 apparaat. En waar we een verbinding met een database dat ik opgeroepen Blog50. Dus laten we eigenlijk ga je gang en lopen de werkende versie van deze, alleen maar om een ​​gevoel van wat het te krijgen toepassing die we bouwen lijkt op. Dus ik heb een kopie van Dit Blog50 voltooid. Dus Laravel eigenlijk is gebouwd in een server die u direct kunt uitvoeren vanaf de opdrachtregel. Dus dit is vergelijkbaar met de Pset voordat wanneer u daadwerkelijk bouw je eigen server in C. Dus ze hebben een ingebouwd, zodat dat u uw Laravel apps kan draaien direct vanaf de opdrachtregel. Dus als we dat doen php artisan dienen, dit zal een ontwikkeling server te starten op poort 8000. Dus als we naar lokale host 8000, zult u merken dat, he. Wij hebben onze blog up and running. Dus Laravel hier genereert de voorpagina van onze blog. Zeer eenvoudige toepassing. Maar er is een paar echt handige functies dat de verschillende onder de motorkap. Dus de blog applicatie eenvoudig. Als we wilden een post te creëren, We kunnen op die knop klikt. We kunnen zeggen, "Hey, iedereen. Dit is een erg leuk seminar, "bijvoorbeeld. En schrijf hier iets naar beneden. Tekst hier. Als we op Verzenden klikt, zult u merken dat onze nieuwe blog bericht is toegevoegd aan de voorpagina van de blog. Als we terug gaan, zult u merken dat Er zijn al enkele opmerkingen geweest op de blog. Dus als we naar beneden scrollen, dan heb je merken dat Jonathan Tan zegt dat hij erg was geïntrigeerd door dit bericht. Dus we in hoe object gaan relational mapping laat u om deze relaties te doen in een vrij naadloze manier ook. Cool. Heeft u vragen over de functionaliteit van wat we gaan bouwen? Cool. Dus laten we beginnen met het daadwerkelijk het maken van de database tabellen. Zo herinneren dat in CS50 Finance, je samen een tafel voor gebruikers alsmede voor de aandelen in uw portefeuille. Dus zoals we al eerder zagen, wat we gebruiken in Laravel is iets bekend als migraties. Dus als we terug gaan naar de verdeelsleutel hier, de eerste opdracht die is behulpzaam dat Laravel biedt u is dit migreren commando. Dus we kunnen php artisan migreren doen: maken. Dus dit laat ons toe om een ​​migratie te creëren. En dan zullen we willen om een ​​migratie te creëren riep create_posts_table, die gaat te zijn waar we gaan zijn de opslag van onze blog posts. En je zult hier opmerken dat het loopt door middel van een code die eigenlijk genereert een bestand een tijdstempel op. Dus als we gaan en kijken naar Database, we zullen zien onder Migraties dat het creëerde een lege file voor ons, die heeft standaardtekst code met de naam dat wij opgegeven, creëren berichten tafel. En het heeft twee functies in. Up is wat we willen, wanneer de run migratie wordt toegepast op de database. En beneden is wat we gaan doen als we willen een migratie te keren. Dus hier laten we beginnen met het schrijven van deze migratie. Dus er is een handige klasse in Laravel genoemd schema. Dus we gaan lopen Schema :: creëren. En we gaan creëren een tabel met de naam berichten. En hier zijn we dit toepassen met behulp van een functie. En binnen hier, we gaan eigenlijk geef de inhoud van onze tafel. We gaan om een ​​ID aan te maken, dat is auto-incrementing. Daarnaast gaan we om een ​​veld te creëren dat vertegenwoordigt de titel van onze blog post. We gaan ook een veld te creëren voor de tekst van onze blog post opslaan. En tot slot, we gaan om wat timestamps te slaan want als onze post werd gecreëerd en toen het werd bijgewerkt. En voor beneden, het is vrij eenvoudig. Alles wat we willen doen is druppel de tabel die we hebben gemaakt. Grote. Nog vragen? Dus nu als we gaan vooruit en-- eigenlijk, lokale host, laat me schrappen wat we vroeger hadden. Ga naar Databases. Ik ga om te verwijderen wat we vroeger hadden. Drop deze en maak een nieuwe database Blog50. Dus wat nu de magische deel is hier dat we kan direct deze migraties van toepassing om de database met behulp van de opdrachtregel tool. Dus als we dat doen php ambachtelijke migreren, je zult merken dat, he. Het is gemaakt van de migratie tafel, waarin we een kijkje zullen nemen op in een beetje, en het wordt toegepast deze eerste migratie. Dus we kijken naar Blog50, zult u merken dat het is gemaakt van twee tafels voor ons. Ten eerste is deze tabel migraties. Dus als we deze bladeren, zult u merken dat deze tabel is vrij eenvoudig. Het is gewoon gezegd dat, he. We hebben deze migratie toegepast. We gaan terug en kijk naar berichten. U zult merken dat de structuur is precies wat we hadden gevraagd. We hebben een auto-incrementing ID. We hebben een reeks voor het opslaan de titel, en een tekstveld voor het opslaan van de inhoud. Grote. Cool. Heeft u vragen over migraties werken, hoe we ze kunnen toepassen? Nee? Cool. Dus nu gaan we om verder te gaan en eigenlijk maakt het model. Dus we willen een berichten model te maken dat slaat een abstractie van de database. Dus in plaats van het doen van MySQL queries direct, we gaan creëren. Dus moeten we een te maken map in hier genoemd modellen. En van binnen hier, we gaan maak een bestand genaamd post.php. Binnen dit PHP-bestand, we gaan creëren een class post die welsprekende verlengt. Welsprekend is de naam van de ORM motor die Laravel biedt. En hier, zouden we verwachten dat je eigenlijk nodig hebt om wat code te schrijven. We gaan een aantal schrijven helper functies later. Maar uit de doos, zal al deze herkennen wat er in de databank en we toegang, zeggen de tekst van onze blog post of de titel, en spullen direct met creëren vrijwel geen code dan ook. Dus dat is een van de magische componenten. En wind eenmaal deze klasse is meer volwaardige, zullen we informatie over onder meer wat het is gerelateerd aan, zodat de opmerkingen. Ook het creëren van een functie dus we kunnen eigenlijk direct krijgen de URL van een blog post pagina. Cool. Heeft u vragen over dat? Nee. Cool. Dus nu een keer hebben we ons model, we willen een controller die is te creëren interageren met deze modellen, en vervolgens de database. Dus als we een kijkje nemen op BlogController, zult u opmerken dat er niet veel hier nu. Alles wat er is een index-functie dat genereert de homepage, maar zonder iets er worden weergegeven. Dus de eerste functie dat we gaan maken is er een die ons in staat stelt om een ​​blogpost te maken. Dus we gaan naar een te verklaren nieuwe functie genaamd newPost. En binnenin hier gewoon, we gaan aan de lay-out van deze pagina in te stellen te zijn een weergave versie, Misschien herinner je je van CS50, van deze sjabloon genaamd blog.new, die we gaan maken in een beetje. U zult hier opmerken op de lijn zes dat we gespecificeerde deze variabele, lay-out. En als we een kijkje nemen op de map Bekeken, er is een lay-outs map, die omvat een zeer eenvoudige HTML-bestand. En van de nota, zult u merken dat we deze container Hier die inhoud oplevert. Dus binnenkant van onze template wat we gaan doen wordt creëren wat gaat worden direct vervangen binnen deze lay-out. Dus hebben we gezegd dat we willen maken een sjabloon genaamd blog.new. Maar de binnenkant van Blog, er is nog niet deze nieuwe template. Dus we gaan naar het creëren van een bestand genaamd new.blade.php. Dit vertelt Laravel dat dit PHP bestand moet worden gemaakt met de blade template engine. Dus dit is een redelijk ongecompliceerd bestand. Het gaat om de vorm waarin zijn we eigenlijk toe te voegen in een blogpost. Dus de magie hier van de overerving is dat, he. Wij willen aangeven dat de afdeling, de inhoud sectie Hier, en wordt begrensd doorsection enstop. Dus wat is in tussen hier gaat worden vervangen in de master-out. En hier wat wij willen doen is zeer eenvoudig een nieuwe HTML-bestand. Laten we voeg gewoon een snelle titel. Voeg een blog post. En binnen het, we zijn naar een formulier. Dit formulier gaat om een ​​actie te hebben. En dit gaat iets te zijn we vervangingsproducten later en we zullen zien hoe routing past in hier. Maar we gaan gewoon te definiëren voor nu dat gaat naar een URL met de route uit createPost. En dan gaat dit om methode Post hebben. Binnen hier, we gaan twee velden. Div class = "form-groep". We gebruiken de Bootstrap CSS bibliotheek vriendelijk aangeboden door Twitter. Dus we gaan naar twee van deze te creëren. Dus deze eerste ingang naar de titel. Dus input name = "titel". Class = "formcontrol". Type = "text". Ik ga een placeholder = "Titel" toe te voegen. En dan de tweede is gaat om een ​​tekst gebied. Name = "content". Class = "formcontrol". En placeholder = "Schrijf hier". Daar gaan we. Tot slot gaan we voeg een sneltoets in te dienen. Type = "submit" class = "btn btn-primaire". Dus dit zijn allemaal kenmerken van Bootstrap zo dat dit kan worden vastgesteld op een manier die prooi aan de gebruiker, plaats naakt HTML. Dus hebben we de controller hier gedefinieerd. We hebben een zeer eenvoudige weergave gedefinieerd. Maar wat ontbreekt is het bindweefsel. Dus op dit punt, Laravel heeft geen idee hoe we gaan eigenlijk toegang tot deze controller. Dus dit is gedefinieerd in een bestand genaamd routes.php. En op dit moment hebben we een route. Dat is wanneer we naar de thuis pad voor deze website, het gaat maken de index controller. Dus hier wat we moeten doen is het implementeren een nieuwe route voor ons om een ​​bericht te plaatsen. Dus gebruiken we deze methode krijgen, waarin wordt bepaald dat wanneer een gebruiker probeert krijg deze page-- specifiek de post slash nieuwe page-- wat we gaan doen wordt het gebruik van de controller genoemd BlogController nieuwe post. Degene die we net gemaakt. En dan gaan we om het alias als newPost. We gaan naar een andere te maken functie in een klein beetje. Maar wat is hier onder de toets "als" is wat kunnen we in plaats onze Blade templates. Dus voor nu, laten we eigenlijk ook route zeggen. Dus we gaan ook een bedieningseenheid zodat wij deze posten kunnen creëren. Dus als een gebruiker berichten naar de pagina bericht slash nieuw, wat we gaan doen is maakt gebruik van een controller die we gaan binnenkort te creëren riep BlogController bij createPost. En we gaan alias Dit met als createPost. Cool. Nog vragen? Cool. Dus laten we lopen wat we tot nu toe. Dus als we dat doen php ambachtelijke dienen, zullen we veel fouten zien. Dus het lijkt erop dat we hebben een syntax error op routes lijn 27. Ah. Het missen van een puntkomma. Dus als we naar 8000, zie je nog niets hier. Dus dit is de standaard startpagina. Maar als we naar plaatsen slash nieuwe, he. Het zal de vorm die we net gemaakt zijn. Op dit moment hebben we geen geïmplementeerd functionaliteit van toen we druk op de knop Verzenden. Dus als we op de Submit knop, het gaat om een ​​fout te lopen. Maar we gaan naar code die nu, precies wat we willen doen wanneer een gebruiker legt dit formulier. Dus laten we dat doen. Ga terug naar de Controllers bestand. Wat we gaan doen is deze nieuwe functie uit te voeren die ons in staat stelt om een ​​bericht te plaatsen. Verklaren nieuwe functie. Publieke functie createPost. En deze functie gaat om een ​​te zijn beetje meer verfijnd dan wat we hadden eerder. Maar je zult hier zien dat we niet gaan om daadwerkelijk te schrijven elke SQL. De ORM, de Eloquent ORM, gaat toestaan ons dit in sommige opzichten een meer elegante manier. Dus we gaan naar een nieuwe post te maken. En hier zijn we instantiëren van een nieuw object uit het model dat we net gecreëerd, de post-model. En wat we gaan doen is de title attribuut van dit gebruik van iets dat we krijgen van de server. Dus dit is vergelijkbaar met wat we eerder hadden in CS50 Financiën waar we zouden doen met de Super Global Bericht op zoek naar de titel. Dus Laravel biedt een aantal sanitaire voorzieningen en wat al niet met behulp van deze helper functie. Dus zouden we de voorkeur aan deze te gebruiken in plaats van deze zeer fundamentele ruwe vorm van PHP. En dan wat we gaan doen is ingesteld de inhoud van het aan Input krijgen inhoud. We zijn eigenlijk aan de hand in te pakken dit in een handige functie dat PHP biedt genaamd nl2br, die draait nieuwe lijnen, NLS, in BRS, pauzes, zodat we daadwerkelijk kunnen hebben verschillende punten binnen het. En tenslotte wat we gaan te doen is het redden van dit bericht. Dus hebben we de functie noemen besparen op dit model. We gaan naar de post op te slaan. En tenslotte wat we gaan doen wordt redirect de gebruiker specifiek aan de route die we gaan creëren kort, alias door viewPost. En we gaan pas in de argumenten id, zijnde de id van deze nieuwe post. Grote. Dus nu, als we daadwerkelijk te gaan en lopen dit. We gaan een nieuw bericht toe te voegen. Laten we zeggen dat dit seminar 50. En zeg, zeker. ADSL. Boeiend. Een soort van content. En legt dit. En we merken dat, hey. routes niet gedefinieerd. Maar als we een kijkje nemen op phpMyAdmin en kijk voor het al dan niet onze functie iets deed. Kijk naar Blog50 berichten. We zullen merken dat, he. In feite hebben we gewoon te maken dat blog posten met de timestamps zoals gespecificeerd. Dus laten we nu terug gaan en echt aan te maken deze andere functie in onze controller, specifiek de viewPost controller. Dus publieke functie viewPost. Dus hier wat we zullen doen, in plaats van het hebben van lege haakjes, we zullen langs wilt op de ID van de post die we creëren. En vanaf hier wat we gaan doen is eigenlijk de database voor. Dus als we het plaatsen, er is een functie genaamd Vinden dat ons in staat stelt om het te doorzoeken met ID. In het bijzonder, eigenlijk, we gaan Gebruik een alternatieve versie van deze zogenaamde Vinden of Fail, die ons in staat stelt om te stoppen uit deze functie, gooi een uitzondering wanneer de ID passeren we in bestaat niet. En dan gaan we iets doen vergelijkbaar met wat we eerder deden waar we de inhoud van deze pagina te zijn de gerenderde versie van deze nieuwe visie die we gaan maken, blog.view. En we gaan overgaan in het-- net als in de CS50 maken function-- een woordenboek van variabelen. De sleutels van deze associatieve array geworden variabelen binnen de template. Dus we gaan Bericht doen. Zo passeren indirect de post die we hebben opgevraagd uit de database. . Nu, wat we gaan doen is het creëren van deze visie zodat we daadwerkelijk kunnen bekijken de blog posts die we hebben opgebouwd. Dus we gaan naar het creëren van een bestand genaamd view.blade.php. Dus binnenkant van deze sjabloon, wat we gaan doen wordt samen een eenvoudige pagina die stelt ons in staat om de inhoud weer te geven. Dus we deel doen, dat is voor de inhoud. Stoppen. En wat we gaan te doen hier binnen is schrijven een aantal HTML om deze pagina weer te geven. Dus we gaan het wrap met een fancy nieuwe HTML5 element genoemd artikel. En hier, we gaan een koptekst waar hebben we gaan gewoon een h1, waaronder de post titel. Dus hier, als we kijken naar deze dubbele accolade-notatie, Dit zal hoofdzakelijk doen PHP echo na de titel. Dus het is een nuttig steno dat Laravel biedt ons. Dus we gaan gebruiken deze notatie plaats. En hier, we gaan ook afdruk van de inhoud ervan. En hier, we gaan naar inhoud post doen. En neer op de bodem wat we gaan doen, is het creëren van een voettekst. En in de voettekst, gaan we eerste display wanneer deze is geplaatst. Dus dit werd gepost op, gemaakt op. En Laravel maakt gebruik van een heel mooi date bibliotheek genaamd Carbon. Dus we kunnen eigenlijk iets genaamd doen difforHumans, die u eerder zag. Wanneer we geplaatst. het zal zeggen, als, vijf seconden geleden. Dus dit is echt een leuke functionaliteit van Laravel. En tot slot, we gaan deze voettekst sluiten. Dus nu als we terug gaan naar Startpagina we gaan niets hier nog omdat zien we hebben niet gecodeerd op de home page. Maar als we naar slash een bericht te plaatsen, we gaan om een ​​uitzondering te zien. Weet iemand waarom zien we een uitzondering? Wat missen we? Het even welke ideeën? Dus wat deden we doen eerder voor ons eigenlijk om te bepalen hoe we naar bijzonder controllers? SPEAKER 1: De route? ERIC Ouyang: Ja. Dus we hebben nog steeds om de route te bepalen. Dus gaan we hier terug naar routes.php. Je zult zien dat we merken heb eigenlijk niet gedefinieerd hoe we gaan krijgen om deze controller. Dus nu gaan we om deze route te bepalen. Het is vrij eenvoudig, vergelijkbaar met wat we eerder deden. Maar wat we gaan hier opvalt is dat we gaan om een ​​tijdelijke aanduiding te hebben. Dus als we dat doen route.get slash bericht ID. Dus ID is nu wat er gaat worden doorgegeven aan de controller. Dit gaat om het gebruik van controller die we net geschapen, BlogController op viewPost. En we gaan alias dit als viewPost. Grote. Dus nu gaan we om deze route te creëren. Dus nu, als we hier gaan en vernieuw deze pagina we in feite hebben onze nieuwe blog post. Dus dit is wat we eerder hebt gemaakt. Zeer eenvoudige pagina, maar geeft de blogpost dat we zojuist hebt gemaakt. Cool. En als we daadwerkelijk gaan door het hele proces van het creëren van een nieuwe blog post, we zullen dat alles merken redirects naar behoren. Als ik zeg: "Hallo. Ik ben Jonathan Tan. " Zeggen: "Dit is mijn blog post." En legt dit, dit zal leiden tot deze nieuwe blog post met ID 2, welke stappen van wat we hadden eerder en geeft het goed. Geweldig. Nog vragen? Ja? SPEAKER 2: Heeft Laravel handvat sanering en alles voor u? ERIC Ouyang: Ja. Dus toen we eerder toen zagen we deden ingang colon colon te krijgen, dat sanitates elke SQL injecties en wat al niet opdat wij zouden willen uitvoeren als we zijn een kwaadwillende gebruiker van de website. Dus Laravel behandelt veel van die achter de schermen. Goede vraag. Dus laten we eens een kijkje nemen op de homepage. Dus als we eerst terug naar de controller voor de home page, je zult merken dat het niet veel hier doen. U zult merken dat we niet passeren in deze controller iets bijzonder behulpzaam. Het is gewoon deze index-bestand. Dus laten we overgaan in dit iets nuttig. En in het bijzonder, zijn we gaat pas in berichten. En Laravel laat ons om na te doen alles, wat zal ons toelaten om alle berichten te krijgen. Nu als we terug te gaan index.php, zie je, he. Nog niets hier. Maar wat we hier willen doen is eigenlijk doorlopen, doe een foreach lus over de berichten dat stelt ons in staat om af te drukken uit de berichten. Dus foreach berichten als post, wat we willen doen wordt de inhoud uit te printen van de blog post. Maar een ding dat je zal opvallen is dat we eigenlijk schreef de meeste van die code al, in view.blade.php. Dus wat gaan we eigenlijk doen is gebruik maken van een mooie handige functie van Blade en factor uit deze gemeenschappelijke code. Dus we gaan hier. We gaan deze inhoud te hier, en wat we gaan doen is een nieuwe map te maken. Laten we noemen het Partials. En hier, we gaan een post.blade.php maken. Dus hier, we meegenomen uit de manier die willen we deze berichten weer te geven. En hier wat we gaan doen in plaats van eigenlijk met die HTML rechtstreeks, we gaan deze richtlijn gebruiken genoemd onder blog.partials.post. En wat we hier gaan doen is pas in de post van de pagina. Dus nu, als we hier terug te gaan, zullen we merken dat de functionaliteit is nog steeds hetzelfde. Maar nu hebben we dit wegvalt code, deze HTML. Dus we kunnen gebruiken in Index. Dus hier, dit is zeer eenvoudig. Alles wat we doen is onder andere blog.partials.post en array. En ergens te vóór, doen we Bericht. Dus nu als we terug gaan naar de startpagina, dan zien we dat, he. We hebben een lijst van alle blog posts die we eerder hadden. We zouden willen toevoegen wat "als" voorwaarden en "anders" voorwaarden dus dat als we niet hebben iets op de blog, we iets willen behulpzaam te geven. Zoals, hey. Er is nog geen content op de blog. En als jullie eigenlijk kijkt naar de distributie code op GitHub, zult u een voorbeeld van hoe we dat doen zien. Cool. Nog vragen? Ja. SPEAKER 2: Ik denk gewoon een fundamentele vraag. Terug op de route. ERIC Ouyang: Ja. Als we een kijkje nemen op routes. SPEAKER 2: Waar komt de uses.blogcontroller bij creëren post, wat heeft dat ons direct naar? ERIC Ouyang: Ja. Yeah. SPEAKER 2: Of wat is dat-- ERIC Ouyang: Dus, neem een ​​kijkje, zeggen bijvoorbeeld, deze route hier. Het eerste deel is de eigenlijke URL die de gebruiker zal gaan. En deze array hier, associatieve array, definieert hoe willen we het hebben toepassing handelen in reactie op het. Dus gebruikt is de controller, de functie die we wilt bellen wanneer een gebruiker naar deze URL. Dus viewPost hier was een functie die we binnen gedefinieerd van BlogController-- SPEAKER 2: Ik zie. ERIC Ouyang: -SO dat wij kan eigenlijk maken het oog, presteren sommige berekeningen, interactie met de SQL-database. SPEAKER 2: OK. ERIC Ouyang: En dan de andere gedeeltelijk "als" is een alias die we gebruiken. Dus als we merken wanneer hebben we de vorm, je zult zien dat URL merken :: routecreatePost. Dus het vervangt in de feitelijke URL, zodat we niet moeilijk coderen deze in zodat we het kunnen veranderen een keer, zeggen als we wilden een andere naam geven. In plaats van de post slash nieuw, we willen doen, zoals, p slash nieuw gewoon schoon te maken onze URL's een beetje. We zouden het te veranderen in een plek vrij dan tussen alle verschillende bestanden. Cool. Dat is goed. Dus nu hebben we een zeer basic blog platform. We willen waarschijnlijk toe te voegen in een knop, zodat dat we eigenlijk kunnen creëren van nieuwe berichten. Dus als we een kijkje nemen op de Layout Master, we hebben een afdeling genaamd Header Right dat we net hebt gedefinieerd aan de top. Dus we kunnen toetsen toe te voegen de bovenkant van de kop. Dus als we naar index.blade.php, eigenlijk doen, is bepalen wat er binnen van hier. Dus dit gedeelte Header Right, wat we gaan doen is toe te voegen in een knop om naar de URL gedefinieerd door de route nieuwe post. Gewoon om het schoon te maken en maak het vrij en al Bootstrap, we gaan ervoor dit een standaard knop. Laten we het grote voor de lol te maken net. En binnen is, kunnen we wat tekst zetten. Maar wat Bootstrap biedt, is glyphicons. Dus we kunnen daadwerkelijk toe te voegen in die leuke potlood dat we eerder zagen. Glyphicon. Glyphicon-potlood. Dus zal dit ons toelaten om te zetten een icoon in plaats van tekst. Nu als we stoppen, dit zal deze sectie definiëren. En, hey. We hebben een mooie knop die ons verbindt direct naar de voeg een blog post pagina. Dus we hebben een vrij eenvoudige blog. We kunnen dingen aan toe te voegen. Maar wat we in het algemeen verwachten van blogs is commentaar. Dus het is echt belangrijk voor ons om te hebben, zeggen, als iemand anders een website bezoekt en echt houdt van de post die ze kunnen deelnemen aan de discussie met andere mensen die de pagina bezoekt. Dus we gaan om te gaan en maak een nieuwe database tabel en een nieuw model zodat we kunnen associëren commentaar bij de berichten. Dus de eerste stap, net als vroeger, is dat we nodig hebben om een ​​migratie uit te voeren. Dus als voorheen, we doen php artisan migreren: maak. En we gaan er een te maken riep create_comments_table. Dit zal een bestand te maken dat heeft ons nieuwe migratie. En we gaan, zoals vóór, definieert u een nieuwe tabel. Dus Schema :: maak een tabel met de naam opmerkingen. Deze functie hier. En binnen deze tabel wat we gaan doen is de eerste, zoals vroeger, wijst u een ID. Verhoogt ID. We gaan om gebruikers in staat te associëren hun naam met een bepaalde reactie. We gaan enkele inhoud hebben dat gaat samen met deze, tekstinhoud. En hier wat we gaan doen is iets anders. We gaan naar een integer creëren dat is post_id genoemd die gaat om wat na te duiden een bepaalde reactie gaat met. Daarnaast zijn we eigenlijk gaan stel een foreign key beperking op dit punt. Dus MySQL zal afdwingen dat. We proberen niet om toewijzen reactie nummer 5 bij post 5000 als we niet had 5.000 berichten op. Dus wat we hier doen, we doen buitenlandse post_id zal worden verbonden het ID veld uit de tabel berichten. En we daadwerkelijk iets te doen anders behulpzaam, is OnDelete. Dus als we verwijder enkele berichten uit de database, dat we willen de cascade schrapt voor commentaar ook. Want het is niet erg behulpzaam voor ons om te reageren op berichten hebben die niet bestaan. En tot slot, als voorheen, we zijn ga tijdstempels te stellen op dit punt. En net als voorheen, we gaan hebben het omgekeerde migratie laten vallen van de tafel opmerkingen. Dus nu als we terug gaan hier, we gaan om deze migratie, ambachtelijke migreren draaien. En nu is het deze toegepast migratie die we net gemaakt. Dus als we een kijkje bij phpMyAdmin, wij, in feite, nu hebben een commentaar tabel die het heeft structuur die we gewoon opgegeven. Dus als voorheen, we zijn gaan naar een nieuw model te maken om abstracte de SQL-tabel dat we zojuist hebt gemaakt. Dus laten we Voeg een nieuw bestand. We gaan noemen comment.php. En dit is in feite gaat om vrij te zijn eenvoudig met een kleine verandering van wat we hadden eerder. Dus klasse Reactie breidt Eloquent. En wat we gaan om hier te doen is te definiëren een functie die de relatie met andere modellen. Dus we gaan naar een post-functie hebben hier dat deze relatie terugkeert. Dus we geven dat dit behoort te plaatsen, zeggen dat er een post dat deze reactie behoort. Dit heeft eigenlijk zijn vermogen P voor het model. En nu net aan de andere flip kant, we moeten zeggen dat, he. Berichten opmerkingen. Dus wat we gaan doen is definiëren publieke functie opmerkingen. En hier wordt teruggegeven Dit heeft veel reactie. Dus nu op magische wijze wanneer we een post, we kunnen het attribuut commentaren te krijgen en het zal het vullen met de uit de database. Dus laten we eigenlijk gaan door en voeg een nieuwe functie aan onze mening bestand Zodat we zowel het beeldscherm en creëren commentaar. Dus we gaan naar een nieuwe sectie te definiëren. Laten we gewoon scheiden met een horizontale lijn. Sectie id = "opmerkingen". Wat we gaan doen hier is, net als voorheen, doorloopt alle opmerkingen. Dus eigenlijk hoe we dit doen is, zoals ik al zei, vrij magisch. Wij doen opmerkingen plaatsen. En dan kunnen we dit voor elkaar te doen lus over elk van de opmerkingen. En wat we gaan doen is div class commentaar, en we gaan eigenlijk print deze reactie. Dus weer dat hey, commentaar name-- de persoon wie dit gepost comment-- zegt dot dot dot. We gaan dit in een blok te zetten citaat, gewoon om het er leuk uit. En dan commentaar inhoud blokcitaat. En foreach. Dus nu dit gaat lus door alle reacties dat is geassocieerd elk van de posten en geven elk van deze opmerkingen. Ik ga naar een ander deel naar beneden toe te voegen hier, die ons in staat stelt om een ​​reactie toe te voegen. Dus h3 class. Zet hier een titel. Voeg een reactie. En we gaan naar een nieuwe vorm te definiëren. Dus als voorheen, we zijn ga formulier actie te doen. En hier, de nieuwe actie is dat we gaan naar een nieuwe controller te definiëren die stelt ons in staat om te reageren op berichten verzoeken voor het maken opmerkingen. Dus URL :: route createComment. Ik ga hier in de parameter door te geven. De id van de post die we zijn het creëren van commentaar op. En dan de werkwijze volgens vorm gaat na te zijn. Nu gaan we naar toe in een twee velden, vorm groep. Dit gaat om een ​​ingang met de te te noemen "naam" en class = "form-control", type = "text", en met de placeholder = "Uw naam." We gaan ook definiëren andere vorm veld, dat gaat om een ​​tekst te zijn gebied als we hadden voorheen. Net als vroeger, noem het inhoud. Class = "form-controle." Placeholder = "Schrijf hier." En gewoon zo dat we daadwerkelijk kan indienen, submit type en class = "btn btn-primaire." Sluit het formulier. Sluit deze actie. Dus nu als we deze pagina waar vernieuwen we hebben, laten we zeggen, een bepaalde functie. We moeten naar de server rebooten. PHP ambachtelijke dienen. Reboot dit. We hebben de route definiëren. Maar voor nu, laten we dit neemt gewoon uit, zodat we je daadwerkelijk kunt zien wat de pagina eruit ziet, en dan we eigenlijk te creëren die route. Dus, hey. Wij hebben dit nieuwe formulier hier beneden zodat we kunnen opmerkingen maken. Dus laten we eigenlijk een te definiëren functie binnen de controller zodat we opmerkingen kunnen toevoegen. Laten we terug gaan. En binnen blogcontroller.php, wat we gaan doen is een nieuwe functie riep reactie te creëren. Publieke functie createComment. Dit gaat om een ​​enkele hebben parameter, de ID van de berichten dat we commentaar op. En net als voorheen, we zijn ga eerst de post te krijgen. Dus plaatsen, findOrfail id. Daarna gaan we om commentaar te kunnen creëren. Dus commentaar = nieuw commentaar plaatsen. Commentaar naam = Input :: krijgen naam. Reactie content = dezelfde nieuwe lijn in de pauzes van Input :: krijgen inhoud. En tot slot, we gaan te hebben om associëren deze reactie bij de post. Dus we gaan gebruiken deze functie, opmerkingen, die ons in staat stelt om op te slaan deze relatie. Dus nu deze reactie zal hebben automatisch de post-ID. We kunnen het ook instellen handmatig, maar dit is meer eenvoudig om zo ver te lezen als de functie gaat. En nadat we presteren dit, wat we willen doen is de gebruiker terug naar de route aangegeven door viewPost met de matrix met de parameter van de post-ID. En nu zo dat dit ook daadwerkelijk functies, moeten we deze route te bepalen. Route :: Post. En nu gaan we dit noemen Post slash ID slash reactie. Array maakt gebruik van de nieuwe functie dat we zojuist hebt gemaakt. BlogController. CreateComment als createComment. Grote. Dus nu hopelijk als we deze pagina vernieuwen en voeg in een commentaar, zeg, David Malan. "Hopelijk werkt dit." Submit. We hebben in feite een commentaar op deze blog post. Cool. Dus nu hebben we een vrij functionele blog post. We gaan gewoon voeg een paar tweaks, zodat dat we wat meer nuttige informatie over deze berichten. Dus als we terug gaan naar de voorpagina, we hebben geen zin hoeveel opmerkingen zijn op elk van deze posten. Dus wat we eigenlijk gaan te doen is, binnen ons model, definiëren een helper functie die het mogelijk maakt ons om het aantal reacties te geven die gepaard gaan met een bepaalde functie. Dus we gaan creëren een helper functie. Publieke functie. GetNumCommentsStr. Dus een string die het nummer aangeeft van de opmerkingen die meegaan met het. En wat we gaan doen is zeggen dat num = deze opmerkingen tellen. Dus we gaan rekenen het aantal reacties. En als dit aantal is gelijk aan 1, we zijn gewoon naar 1 reactie terug. En dan anders, we willen terugkeren de aaneenschakeling van num en opmerkingen, dus we krijgen de pluralisering correct. Maken dit een enkel citaat net. Één reactie. En nu kunnen we deze functie te gebruiken direct binnenkant van onze mening. Dus als we terug gaan naar de gedeeltelijke berichten die we gemaakt hebben, nu willen we eigenlijk geven het aantal reacties. Dus wat we kunnen doen is post, gebruik deze functie dat we alleen maar gemaakt om geven het aantal reacties. Dus als we vernieuwen, is het nu doet in feite scherm Het aantal reacties die meegaan met het. Als we wilden zin als je te zijn eigenlijk kijken naar de verdeelsleutel, kunnen we eigenlijk koppelen dit aan de reacties. Misschien herinner je je, we gedefinieerd binnen de zien dat dit deel ID opmerkingen. Dus als we eigenlijk wilden koppelen direct naar de sectie opmerkingen, wat zouden we hier doen is een href URL van de route viewPost. Passeren in de array-ID van de post-ID. En dan willen we naar in het bijzonder de sectie opmerkingen. Hier laten we sluiten de A tag. Dus nu als we deze te vernieuwen pagina, klikken we op dit punt. We zullen direct te gaan het opmerkingenveld. Als we hadden een langere post, kunt u eigenlijk zien deze bounce naar beneden. Maar je zult merken dat het niet bovenaan de pagina. Cool. Grote. Dus dat is een vrij eenvoudig voorbeeld van iets simpels dat je kunt doen met Laravel. Maar je kunt hier zien dat we hebben een heleboel dingen gedaan met tamelijk kleine hoeveelheid code. Laravel stelt ons in staat om het te doen SQL-query's achter de schermen. Het doet de sanitaire voorzieningen voor ons achter de schermen. Stelt ons in staat om deze relaties te doen zeer eenvoudig, zonder ons te hoeven aan een SQL doen treden verklaringen combineren reacties met wat de berichten. Stelt ons in staat om dit te doen erfenis van templates zodat we deze nesten kunnen definiëren bestanden, zodat we onszelf niet herhalen, net als toen we dat weergave van de blog posts dat we niet hoeven te Kopieer en plak de code. En vanaf hier kun je bouwen steeds ingewikkelder toepassingen. Je kunt je voorstellen als we wilde implementeren log-in, zouden we kunnen zeggen, te brengen in een derde raamwerk dat ons in staat stelt om dat te doen. Er is een bos van hen dat zijn echt, echt geweldig dat kan doen, zoals, wachtwoord herstel. En het zal u een stuur reset wachtwoord e-mail. We kunnen toestemming implementeren zodat ik een post kan creëren, maar iemand anders niet kan bewerken. We kunnen implementeren functionaliteit om berichten te verwijderen. Maar je kunt hier zien dat we vrij veel al de rudimentaire onderdelen om echt te bouwen wat, echt, dynamische en spannende web-apps. Dus met dat, ik denk dat we goed. Hebben jullie nog vragen? Ja? SPEAKER 3: Hoe doe je krijgen statische inhoud? ERIC Ouyang: Statische content. Dus je zag voordat dat wanneer we hadden dit recht hier, deze inhoud lay-out, view merk, dit hadden we zonder deze array achteraf. Blog.index, dit hadden we als slechts een statisch bestand. Dus als we niet voorbij iets mee te, het zal alleen maken de HTML direct. Maar als we passeren in deze associatieve reeks van berichten, dat is dynamisch getrokken uit de database, we kan de pagina dynamisch te maken. Cool. Een andere vragen? SPEAKER 3: Hoe zou je het vergelijkt Laravel om misschien nog enkele andere opties? ERIC Ouyang: Tuurlijk. Yeah. Dus Laravel is-- dat is een grote question-- een van de vele opties voor web frameworks. Dus Ruby on Rails is een dat is populair. Ik denk dat Twitter gebruikt te worden geïmplementeerd met Ruby on Rails. Ik denk dat ze sinds ingeschakeld. Er is een andere genaamd FuelPHP. Dus Ruby on Rails maakt gebruik van de Ruby taal en implementeert een groot deel van de MVC stuff die we hier zien. FuelPHP is een andere PHP framework. Django is een van mijn favorieten. Het is een web framework voor Python. Zo kunt u uw web-app in Python te schrijven. Dus er is een ton van deze opties. Laravel, denk ik, door en groot is mijn favoriete rechts nu voor PHP, alleen maar omdat van de componenten dat we het eerder over had. Het is Composer ingeschakeld. Het omvat een heel, heel expressieve ORM-systeem. Heeft ook echt een geweldige template taal dat sommige van de anderen gewoon niet te bieden. En migraties. Migraties zijn geweldig ook. Cool? Geweldig. Nou, heel erg bedankt hiervoor het kijken naar dit seminar, en veel geluk op je laatste projecten.