[GIOCO MUSIC] ERIC OUYANG: Ehi, tutti. Benvenuto. Questa è la costruzione dinamica Applicazioni Web con Laravel. Il mio nome è Eric Ouyang. Sono al secondo anno a studiare Studi sociali con una secondaria in informatica, e vivo in Adams Casa qui a Harvard. Così Laravel, nella sua forma più centro, è un framework web app MVC. Così come quello che voi ragazzi avete state facendo con CS50 Finanza, Laravel è un framework che permette di costruire applicazioni web dinamiche. Così si può pensare che in un certo senso come un'estensione del tipo di roba che hai fatto in CS50 Finanza, ma un sistema che è molto più robusto, molto più elegante in un certo senso, e fornisce molti funzionalità per voi per costruire abbastanza complesso applicazioni web. Quindi andiamo attraverso alcuni delle caratteristiche principali, e poi ci immergeremo in un esempio di costruzione di un blog applicazione con Laravel. Così una delle prime cose che lo differenzia dal tipo MVC di lavoro che si sia fatto con CS50 è include un motore ORM. Così ORM sta per oggetto mapping relazionale. Quindi questo permette di costruire un livello di astrazione tra il database e controller. Quindi, a differenza di CS50 Finance dove si fanno direttamente le query, lo strato ORM consente di astratto che via e creare modelli che sono più potenti è possibile direttamente con query SQL. Un'altra cosa che è veramente utile è modelli ereditabili. Così si noterà in CS50 Finanza, si finisce per riscrivere un sacco di cose, dove i luoghi si potrebbe potenzialmente riutilizzare le cose, non sei in grado di. Così qui in Laravel, è possibile utilizzare ciò che è noto come motore di template lama per creare una struttura master. E da lì, è possibile ereditare in modo che i sub-modelli può effettivamente includere elementi all'interno che grande modello base. Migrazione. Quindi questa è una funzionalità abbastanza standard su la maggior parte dei moderni framework applicativi web. Quindi questo permette di rappresentare modifiche dello schema di database nel codice. Così, senza andare a dire, phpMyAdmin, si può effettivamente creare queste migrazioni dove voi rappresentate il database schema cambia in codice direttamente. E questo consente a-- soprattutto se si dispone di più persone che lavorano sulla stessa application-- web monitorare questi cambiamenti, dire in GitHub, o qualche altro repository. Quindi questo è davvero utile e mitiga la necessità , per esempio, passare in giro un sacco di SQL discariche. E, infine, Composer è qualcosa di veramente, veramente utile che consente di utilizzare altri Codice delle persone di fare cose impressionanti. Così Laravel di strutturato come diversi pacchetti compositore. Quindi, dice, se si voleva portare in un pacchetto di autenticazione o se si voleva portare in qualche sorta di sceneggiatura generatore o un amministratore interfaccia, è possibile collegare e riprodurre i componenti con Composer. Quindi cerchiamo di iniziare. Tutte le domande da voi ragazzi prima di iniziare? Nessuna domanda? Freddo. Quindi il primo passo è installazione Composer. Così Composer consente di gestire queste dipendenze, se è il quadro Laravel o qualche altra estensione di terze parti. Il primo comando consente di scaricare Compositore, e il secondo comando consente di spostarlo nella cartella bin locale in modo da poter eseguire Compositore direttamente attraverso il terminale. Dopo di che, andare avanti e creare un nuovo progetto Laravel. Stiamo davvero andando a usare qualche esempio di codice che ho messo insieme per creare questo blog. Ma se si sta iniziando dal zero, si potrebbe utilizzare questo comando qui, il compositore crea progetto, laravel taglio su laravel, e poi il nome del progetto. E che includerà tutto il codice di distribuzione per iniziare un nuovo progetto Laravel. Così per i vostri progetti finali CS50, ti probabilmente si desidera utilizzare quel comando. Ma stiamo per iniziare con questo. Quindi, una volta che hai fatto che, si sta andando ad ottenere un numero abbastanza ampio di file in blog50. Così facciamo solo passare attraverso alcuni di questi componenti. Noterete in questo percorso directory, c'è una cartella app. All'interno della cartella app, c'è un paio di utili cartelle. Da segnalare per iniziare è questa cartella config. Quindi questo imposta come l'applicazione web è andare, per esempio, l'autenticazione persone o cose contanti o connettersi al database. E che cosa è veramente utile è che Laravel consente di impostare diversi ambienti di sviluppo. Quindi quello che abbiamo fatto qui è se andiamo nella cartella locale, c'è un file database.php. E si noterà qui che impostare una connessione MySQL consente alle persone di connettersi al server MySQL che è direttamente sull'apparecchio CS50. E stiamo connessione a un database che ho creato chiamato Blog50. Quindi cerchiamo di andare avanti e di fatto eseguire la versione di lavoro di questo, solo per ottenere un senso di ciò che il applicazione che stiamo costruendo assomiglia. Così ho una copia di questo Blog50 completato. Così Laravel realtà ha costruito in un server che è possibile eseguire direttamente dalla riga di comando. Quindi questo è simile al PSet prima quando in realtà creare il proprio server in C. Così hanno uno costruito in modo che è possibile eseguire le applicazioni Laravel direttamente dalla linea di comando. Quindi, se facciamo php artigiano servire, questo lancerà un server di sviluppo sulla porta 8000. Quindi, se andiamo a host locale 8.000, si noterà che, hey. Abbiamo il nostro blog attivo e funzionante. Così Laravel qui sta generando la prima pagina del nostro blog. Molto semplice applicazione. Ma ci sono un paio caratteristiche davvero nifty che fornisce sotto la cappa. Così dell'applicazione blog semplice. Se volessimo creare un post, possiamo cliccare su quel pulsante. Possiamo dire, "Hey, tutti. Questo è davvero un divertente Seminario ", per esempio. E scrivere qualcosa qui. Testo qui. Se si fare clic su Invia, ti notare che il nostro nuovo blog post è stato aggiunto prima pagina del blog. Se torniamo qui, si noterà che ci sono stati alcuni commenti già sul blog. Quindi, se scorriamo, ti si noti che Jonathan Tan dice che è stato molto incuriosito da questo post. Quindi andremo in come oggetto mapping relazionale consente di fare queste relazioni in un modo abbastanza trasparente pure. Freddo. Tutte le domande circa la funzionalità di quello che andremo a costruire? Freddo. Quindi cominciamo con realtà la creazione delle tabelle del database. Quindi, ricordare che in CS50 Finance, si unire un tavolo per gli utenti nonché per la scorte nel vostro portafoglio. Quindi, come abbiamo accennato in precedenza, quello che usiamo in Laravel è qualcosa di noto come le migrazioni. Quindi, se torniamo al codice di distribuzione qui, il primo comando che è utile che Laravel fornisce è questo comando migrate. Quindi possiamo fare php migrate artigianale: fare. Quindi questo ci permette di creare una migrazione. E poi ci vuole per creare una migrazione chiamato create_posts_table, che sta andando essere dove stiamo andando a essere riporre i nostri post sul blog. E si noterà qui che si corre attraverso un codice che in realtà genera un file con un timestamp su esso. Quindi, se andiamo a guardare Database, notiamo sotto Migrazioni che è stato creato un file vuoto per noi, ha codice standard con il nome che abbiamo specificato, creare posti tavola. E ha due funzioni in esso. Up è quello che vogliamo eseguire quando il migrazione viene applicato al database. E giù è quello che stiamo per fare quando vogliamo invertire una migrazione. Così qui cominciamo fuori con la scrittura di questa migrazione. Quindi c'è una classe utile in Laravel chiamato Schema. Quindi stiamo andando a correre Schema :: creare. E stiamo andando a creare un tavolo chiamato post. E qui applichiamo questo utilizzando una funzione. E all'interno di questo, stiamo andando a realtà precisare i contenuti della nostra tavola. Stiamo per creare un ID, che è incremento automatico. Inoltre, stiamo andando per creare un campo che rappresenta il titolo del nostro post sul blog. Stiamo anche andando a creare un campo per memorizzare il testo del nostro post sul blog. E, infine, stiamo andando a memorizzare alcuni timestamp per quando il nostro posto è stato creato e quando è stato aggiornato. E per giù, è abbastanza semplice. Tutto quello che vogliamo fare è caduta la tabella che abbiamo creato. Grande. Tutte le domande? Così ora se andiamo avanti e- realtà, host locale, mi permetta di cancellare quello che abbiamo avuto in precedenza. Andate su Database. Ho intenzione di eliminare quello che avevamo in precedenza. Eliminare questo e creare un nuovo database Blog50. Così ora che cosa magica parte è qui che noi può applicare direttamente queste migrazioni al database utilizzando la riga di comando utensile. Quindi, se facciamo php artigiano migrazione, si noterà che, hey. Ha creato la tabella di migrazione, che daremo uno sguardo a un po ', ed è applicata questa prima migrazione. Quindi guardiamo Blog50, si noterà che è stato creato due tavoli per noi. Il primo è questo tavolo migrazioni. Quindi, se navighiamo questo, si noterà che questo tavolo è abbastanza semplice. E 'appena detto che, hey. Abbiamo applicato questa migrazione. Andiamo indietro e guardiamo ai posti. Noterete che la struttura è esattamente quello che avevamo chiesto esso. Abbiamo un ID incremento automatico. Abbiamo una stringa per la memorizzazione il titolo, e un campo di testo per memorizzare il contenuto. Grande. Freddo. Tutte le domande circa le migrazioni lavoro, come possiamo applicarle? No? Freddo. Così ora stiamo per andare avanti ed effettivamente creare il modello. Così vogliamo creare un modello post che memorizza un'astrazione del database. Quindi, piuttosto che fare query MySQL direttamente, stiamo andando a creare. Quindi dobbiamo creare un cartella qui chiamati modelli. E qui dentro, stiamo andando a creare un file denominato post.php. All'interno di questo file PHP, stiamo andando a creare un posto di classe che estende eloquente. Eloquente è il nome del ORM motore che Laravel fornisce. E qui, potremmo aspettarci che hai veramente bisogno di scrivere del codice. Stiamo per scrivere qualche funzioni di supporto successivi. Ma fuori dalla scatola, questo sarà già riconoscere ciò che è nel database e possiamo accedere, dire, il testo del nostro blog o il titolo, e di creare direttamente con roba praticamente nessun codice di sorta. Ecco, questo è uno dei componenti magiche. E il vento, una volta questa classe è più a pieno titolo, includeremo informazioni su ciò che è legato al, così i commenti. Anche creare una funzione così possiamo realmente direttamente ottenere l'URL di una pagina di post sul blog. Freddo. Tutte le domande di questo? No. Freddo. Così ora, una volta che abbiamo il nostro modello, abbiamo vuole creare un controller che è in grado di interfacciarsi con questi modelli, e successivamente il database. Quindi, se diamo uno sguardo alle BlogController, ti notare che non c'è molto qui in questo momento. Tutto quello che c'è è una funzione di indice che genera la home page, ma senza nulla lì per visualizzare ancora. Quindi la prima funzione che stiamo andando a creare è quella che ci permette per creare un post sul blog. Quindi stiamo andando a dichiarare una nuova funzione chiamata newPost. E dentro qui semplicemente, stiamo andando per impostare il layout della pagina ad essere una versione di rendering, se vi ricordate da CS50, di questo modello chiamato blog.new, che stiamo andando a creare in un po '. Noterete qui on line sei che abbiamo specificato questa variabile, il layout. E se diamo uno sguardo presso la cartella Visualizzazioni, vi è una cartella Layouts, che include un file HTML di base. E di nota, si noterà che noi abbiamo questo contenitore qui che produce contenuti. Così all'interno del nostro modello quello che stiamo andando a fare è creare quello che sta per essere sostituito direttamente all'interno di questo layout. Così abbiamo detto che vogliamo rendere un modello chiamato blog.new. Ma dentro di Blog, c'è Non ancora questo nuovo modello. Quindi stiamo andando a creare un file chiamato new.blade.php. Questo dice che Laravel questo file PHP dovrebbe essere resa con la template engine lama. Quindi questo è abbastanza di file semplice. E sarà la forma con la quale in realtà aggiungiamo in un post sul blog. Così la magia qui dal ereditarietà è che, hey. Vogliamo specificare che il sezione, la sezione dei contenuti qui, che si delinea bysection estop. Così che cosa è in mezzo qui sta per essere sostituito nel layout master. Ed ecco quello che vogliamo fare è molto semplice creare un nuovo file HTML. Diciamo solo aggiungere un titolo veloce. Aggiungi un post sul blog. E all'interno di esso, siamo andando a creare un modulo. Questo modulo sta per avere un'azione. E questo sta per essere qualcosa che noi sostituiamo in seguito, e vedremo come percorso si inserisce qui. Ma stiamo solo andando a definire per ora che questo va ad un URL con il percorso da createPost. E poi questo sta andando avere metodo post. All'interno di questo, stiamo andando avere due campi. Div class = "forma-gruppo". Stiamo utilizzando la libreria Bootstrap CSS gentilmente fornito da Twitter. Quindi stiamo andando a creare due di questi. Quindi questo primo ingresso è sarà il titolo. Nome Così input = "title". Class = "FormControl". Type = "text". Ho intenzione di aggiungere un segnaposto = "Title". E poi il secondo è sta per essere un'area di testo. Name = "content". Class = "FormControl". E segnaposto = "Scrivi qui". Ci andiamo. Infine, stiamo andando a aggiungere un pulsante rapido presentare. Type = "submit" class = "btn btn-primario". Quindi questi sono tutti caratteristiche di Bootstrap così che questo può essere posato in un modo che è preda per l'utente, piuttosto che HTML nudo. Così abbiamo definito il controller qui. Abbiamo definito una semplice visione. Ma ciò che manca è il tessuto connettivo. Quindi a questo punto, Laravel non ha idea di come stiamo andando a realtà accedere a questo controller. Quindi questo è definito in un file chiamato routes.php. E proprio ora, abbiamo un percorso. Che è quando andiamo al percorso a casa per questo sito, sta andando a rendere il controller di indice. Ecco quello che dobbiamo fare è implementare una nuova via per noi per creare un post. Quindi usiamo questo metodo ottenere, che specifica che, quando un utente cerca di ottenere questo page-- specificamente post taglio su nuovo page-- quello che stiamo andando a fare è utilizzare il controller chiamato BlogController nuovo post. Quello che abbiamo appena creato. E poi stiamo andando di alias come newPost. Stiamo per creare un altro funzione in un po '. Ma cosa c'è qui sotto il tasto "come" è quello possiamo sostituire entro i nostri modelli lama. Quindi per ora, diamo in realtà anche dire rotta. Quindi stiamo anche andando per creare un controllore in modo che possiamo creare questi posti. Quindi, se un utente messaggi al post pagina slash nuovo, quello che stiamo per fare è utilizza un controller che stiamo andando a creare in breve chiamato BlogController a createPost. E stiamo per alias questo con come createPost. Freddo. Tutte le domande? Freddo. Quindi cerchiamo di eseguire quello che abbiamo finora. Quindi, se facciamo php artigiano servire, vedremo un sacco di errori. Quindi sembra che abbiamo un Errore di sintassi sulle rotte linea 27. Ah. Manca un punto e virgola. Quindi, se andiamo a 8.000, vedrete nulla ancora qui. Quindi questa è la pagina iniziale predefinita. Ma se andiamo a postare tagliare nuovo, hey. Sarà la forma che abbiamo appena creato. In questo momento, non ci siamo implementato la funzionalità di quando si preme il pulsante Invia. Quindi, se si clicca su Submit tasto, è andare a correre un errore. Ma andiamo a codice in questo momento, proprio quello che abbiamo vuole fare quando un utente sostiene questa forma. Allora, facciamo così. Torna al file Controller. Quello che andremo a fare è implementare questa nuova funzione che ci permette di creare un post. Dichiarare nuova funzione. Funzione createPost pubblica. E questa funzione sarà un po 'più sofisticato di quello che avevamo prima. Ma vedrete qui che non siamo intenzione di scrivere in realtà qualsiasi SQL. L'ORM, il Eloquente ORM, sta per consentire noi facciamo questo in qualche modi un modo più elegante. Quindi stiamo andando a creare un nuovo post. E qui siamo un'istanza di un nuovo oggetto dal modello che abbiamo appena creato, il modello di palo. E quello che stiamo per fare è impostare il attributo title di questo con qualcosa che otteniamo dal server. Quindi questo è simile a quello che avevamo prima in CS50 Finance dove avremmo fatto, utilizzando il Super Global Post cerca di titolo. Così Laravel fornisce alcuni servizi igienico-sanitari e quant'altro utilizzare questa funzione di supporto. Quindi preferiremmo usare questo invece di questa forma grezza molto semplice da PHP. E poi quello che andremo a fare è impostare il contenuto di ingresso per ottenere contenuti. Stiamo davvero andando a avvolgere questo in una funzione utile che PHP fornisce chiamato nl2br, che trasforma nuove linee, NLS, in brs, pause, in modo da poter effettivamente diversi punti all'interno di esso. E infine che cosa stiamo andando fare è salvare questo post. Così chiamiamo la funzione risparmiare su questo modello. Stiamo andando a salvare il posto. E infine quello che andremo a fare è reindirizzare l'utente specificamente per il percorso che andremo a creare a breve, alias viewPost. E stiamo andando a passare negli argomenti id, essendo l'id di questo nuovo post. Grande. Così ora se abbiamo effettivamente andare e corriamo questo. Stiamo per aggiungere un nuovo post. Diciamo che questo è un seminario di 50. E dire, certo. ADSL. Che Cosa Mai. Una sorta di contenuti. E inviarlo. E ci accorgiamo che, hey. percorsi non definiti. Ma se diamo uno sguardo a phpMyAdmin e cercare o meno la nostra funzione ha fatto nulla. Guarda i messaggi Blog50. Si noterà che, hey. In realtà, abbiamo appena creiamo quel blog postare con i timestamp come specificato. Così ora torniamo ed effettivamente creare questa altra funzione nel nostro controller, in particolare il controllore viewPost. Funzione viewPost Così pubblico. Quindi, ecco cosa faremo, invece di avere parentesi vuote, dobbiamo provare a passare l'ID del il post che stiamo creando. E da qui che cosa stiamo andando a fare effettivamente interrogare il database per esso. Quindi se noi pubblichiamo, c'è una funzione chiamata Trova che ci permette di interrogare dal ID. In particolare, in realtà, stiamo andando a utilizzare una versione alternativa di questo chiamato Trova o Fail, che ci permette per uscire da questa funzione, un'eccezione se l'ID passiamo non esiste. E poi andremo a fare qualcosa simile a quello che abbiamo fatto in precedenza dove abbiamo impostato il contenuto di questa pagina per essere la versione resa di questa nuova visione che andremo a creare, blog.view. E stiamo per passare in it-- proprio come nei CS50 render function-- un dizionario di variabili. Le chiavi di questo array associativo diventare variabili all'interno del template. Quindi stiamo andando a fare alberino. Quindi passare indirettamente il post che abbiamo interrogato dal database. . Ora che cosa stiamo andando a fare è creare questo punto di vista in modo da poter effettivamente vedere i post del blog che abbiamo costruito. Quindi stiamo andando a creare un file chiamato view.blade.php. Quindi all'interno di questo modello, quello che stiamo andando a fare è mettere insieme una pagina semplice che ci permette di visualizzare il contenuto. Così facciamo parte, che è prima di contenuti. Stop. E che cosa stiamo andando fare entro ecco scrivere qualche HTML per visualizzare questa pagina. Quindi stiamo andando a avvolgerlo con una fantasia nuovo elemento HTML5 chiamato articolo. E qui, stiamo andando avere un'intestazione dove stiamo per avere semplicemente h1, che include il titolo del post. Ecco, se guardiamo a questo doppia notazione parentesi graffa, questo farà essenzialmente Php echo titolo del post. Quindi è una scorciatoia utile che Laravel ci fornisce. Quindi stiamo andando a utilizzare questa notazione invece. E qui, stiamo andando anche stampare il contenuto di esso. E qui, stiamo andando fare contenuto del post. E giù in fondo ciò che siamo intenzione di fare è creare un piè di pagina. E nel piè di pagina, che andremo a primo display quando è stata pubblicata. Quindi questo è stato pubblicato su, creato. E Laravel usa veramente un bel biblioteca data chiamato Carbon. Così possiamo effettivamente fare qualcosa chiamato difforHumans, che avete visto prima. Quando abbiamo pubblicato. si dirà, come cinque secondi fa. Quindi questo è davvero un bel funzionalità di Laravel. E, infine, stiamo andando per chiudere questa footer. Così ora se torniamo a Home stiamo andando vedere nulla ancora qui perché non abbiamo codificato la home page. Ma se andiamo a postare una barra, stiamo andando a vedere una eccezione. Qualcuno sa perché vediamo un'eccezione? Quello che ci manca? Tutte le idee? Che cosa abbiamo fatto prima per noi in realtà per definire come si arriva a particolare i controllori? SPEAKER 1: Il percorso? ERIC OUYANG: Sì. Quindi dobbiamo ancora definire il percorso. Così torniamo qui per routes.php. Noterete che abbiamo Non hanno effettivamente definito come stiamo andando ottenere a questo controller. Così ora stiamo andando a definire questo percorso. E 'abbastanza semplice, simile a quello che abbiamo fatto in precedenza. Ma quello che stiamo andando a notare qui è che stiamo per avere un segnaposto. Quindi, se facciamo route.get ID barra posta. Così ID ora è quello che sta succedendo a essere passato nel controllore. Questo sta per utilizzare il controller che abbiamo appena creato, BlogController a viewPost. E stiamo andando a alias questo come viewPost. Grande. Così ora stiamo andando a creare questo percorso. Così ora se andiamo qui e aggiornare questa pagina, noi in realtà ne abbiamo il nostro nuovo post sul blog. Quindi questo è quello che abbiamo creato in precedenza. Molto semplice pagina, ma viene visualizzato il blog post che abbiamo appena creato. Freddo. E se abbiamo effettivamente passare attraverso l'intero processo di creazione di un nuovo post sul blog, ci accorgiamo che tutto reindirizza correttamente. Se dico: "Ciao. Sono Jonathan Tan. " Dire, "Questo è il mio post sul blog." E lo presenta, questo creerà questo nuovo post del blog con ID 2, che incrementi da quello che avevamo in precedenza e visualizza correttamente. Impressionante. Tutte le domande? Sì? SPEAKER 2: Does maniglia Laravel sanificazione e tutto per voi? ERIC OUYANG: Sì. Così, quando abbiamo visto prima, quando abbiamo fatto ingresso colon colon ottenere, che sanitates qualsiasi SQL iniezioni e quant'altro che si potrebbe desiderare di effettuare, se siamo un utente malintenzionato del sito. Così Laravel gestisce un sacco di che dietro le quinte. Buona domanda. Quindi, diamo uno sguardo alla home page. Quindi, se prima torniamo al controller per la home page, si noterà che non fa molto qui. Noterete che non siamo passando in questo controller nulla di particolarmente utile. E 'solo questo file di indice. Quindi passiamo in questo qualcosa utile. E in particolare, siamo andando a passare in posti. E Laravel ci permette per fare posto tutto, che ci permetterà di ottenere tutti i posti. Ora, se torniamo a index.php, vedrete, hey. Niente qui ancora. Ma quello che vogliamo fare qui è in realtà scorrere, fare un ciclo foreach sui post che ci permette di stampare i messaggi. Così come i messaggi foreach posto, quello che vogliamo fare è stampare il contenuto del post sul blog. Ma una cosa che si nota è che abbiamo effettivamente scritto la maggior parte di quel codice già, in view.blade.php. Così che cosa stiamo andando a fare è in realtà utilizzare una bella caratteristica utile di Blade e fattore questo codice comune. Così siamo andate qui. Stiamo andando a prendere questo contenuto proprio qui, e quello che stiamo andando a fare è creare una nuova cartella. Diciamo solo chiamano partial. E qui, stiamo andando per creare un post.blade.php. Così qui, abbiamo scomposto il modo in che vogliamo visualizzare questi messaggi. Ed ecco quello che faremo invece di in realtà avere direttamente che HTML, stiamo andando a utilizzare questa direttiva chiamato includono blog.partials.post. E quello che stiamo per fare qui è passare nel post della pagina. Così ora se torniamo qui, faremo si noti che la funzionalità è ancora lo stesso. Ma ora abbiamo questo fattorizzato codice, questo HTML. Così possiamo usarlo in Index. Ecco, questo è molto semplice. Tutto ciò che facciamo è includere blog.partials.post e array. E da qualche parte a prima, noi alberino. Così ora se torniamo al home page, vedremo che, hey. Abbiamo una lista di tutti i post del blog che avevamo prima. Potremmo voler aggiungere qualche "se" condizioni e le condizioni "altro" in modo che se non abbiamo nulla sul blog, vogliamo visualizzare qualcosa utile. Come, hey. Non c'è ancora nessun contenuto sul blog. E se voi ragazzi davvero guardare a il codice distribuzione su GitHub, vedrete un esempio di come lo facciamo. Freddo. Tutte le domande? Sì. SPEAKER 2: Credo solo una domanda fondamentale. Torna al percorso. ERIC OUYANG: Sì. Se diamo uno sguardo alle rotte. SPEAKER 2: Da dove viene il uses.blogcontroller a creare dopo, cosa ci indirizzano a? ERIC OUYANG: Sì. Sì. SPEAKER 2: O quello che è che-- ERIC OUYANG: Allora, date un'occhiata, dire per esempio, questo percorso proprio qui. La prima parte è l'attuale URL che l'utente andrà a. E questo array qui, array associativo, definisce come vogliamo avere la applicazione agire in risposta ad essa. Quindi utilizza è il controller, la funzione che desidera chiamare quando un utente va a questo URL. Così viewPost proprio qui è stato un funzione che abbiamo definito dentro di BlogController-- SPEAKER 2: Capisco. ERIC OUYANG: --quindi che noi può effettivamente rendere una vista, eseguire alcuni calcoli, interagire con il database SQL. SPEAKER 2: OK. ERIC OUYANG: E poi l'altro parte, "come" è un alias che usiamo. Quindi, se ci accorgiamo quando abbiamo creato la forma, si noterà che URL :: routecreatePost. Così sostituisce nel reale URL in modo che non siamo duri codifica questi in modo che possiamo cambiare una volta, diciamo se volevamo rinominare. Invece di barra posta nuovo, vogliamo fare come, p tagliare nuovo solo per la pulizia i nostri URL di un bit. Vorremmo cambiare in un punto piuttosto che in tutti i diversi file. Freddo. Quello è buono. Così ora abbiamo una piattaforma di blog di base. Probabilmente vogliamo aggiungere in un pulsante in modo che possiamo effettivamente creare nuovi posti. Quindi, se diamo uno sguardo al Master Layout, abbiamo una sezione chiamata Intestazione Destra che abbiamo appena definito nella parte superiore. Così possiamo aggiungere pulsanti a all'inizio dell'intestazione. Quindi, se andiamo a index.blade.php, in realtà fare è definire ciò che accade dentro di qui. Quindi questa sezione Intestazione Destra, quello che stiamo andando a fare è aggiungere in un pulsante per andare al URL definito per via nuovo post. Giusto per ripulirlo e fare abbastanza e tutto Bootstrap, stiamo andando a fare questo tasto un default. Diciamo solo rendono grande per divertimento. E al suo interno, si potrebbe mettere un po 'del testo. Ma ciò che Bootstrap fornisce è glyphicons. Così possiamo davvero aggiungere a quella bella matita che abbiamo visto in precedenza. Glyphicon. Glyphicon-matita. Quindi questo ci consentirà di mettere in una icona al posto del testo. Ora, se ci fermiamo, questo definirà questa sezione. E, hey. Abbiamo un bel pulsante che ci lega direttamente alla aggiungere una pagina di post del blog. Così abbiamo una abbastanza semplice blog. Possiamo aggiungere cose ad esso. Ma ciò che generalmente si aspetta dai blog è commentare. Quindi è molto importante per noi avere, dire, se qualcuno visita un sito web e gli piace davvero il post che possono impegnarsi in una discussione con le altre persone che visitano la pagina. Quindi stiamo per andare a creare un nuova tabella del database e un nuovo modello di modo che possiamo associare commenta con messaggi. Quindi il primo passo, come prima, è che abbiamo bisogno di eseguire una migrazione. Così come prima, noi php artigiano migrazione: fare. E stiamo andando a creare un chiamato create_comments_table. Questo creerà un file che ha la nostra nuova migrazione. E stiamo andando, come prima, definire una nuova tabella. Così Schema :: creare un tavolo chiamato commenti. Questa funzione qui. E dentro questa tabella cosa stiamo andando a fare è in primo luogo, come prima, assegnare un ID. Incrementa ID. Stiamo per consentire agli utenti di associare il loro nome con un particolare commento. Stiamo per avere qualche contenuto va di pari passo con questo, il contenuto del testo. Ed ecco quello che stiamo andando a fare è qualcosa di diverso. Stiamo per creare un intero che si chiama post_id che sta a significare che cosa messaggio un particolare commento va con. Inoltre, stiamo davvero andando a impostare un vincolo di chiave esterna su questo. Così MySQL applicherà tale. Non stiamo cercando di assegnare numero commento 5 di inviare 5.000 se non abbiamo aveva 5.000 messaggi su di esso. Quindi quello che facciamo qui, facciamo post_id straniera sta per essere associato il campo ID dai pali della tabella. E faremo davvero fare qualcosa altro utile, è onDelete. Quindi, se cancelliamo alcuni postare dal database, che vogliamo cascata il elimina per i commenti pure. Perché non è molto utile per noi avere commenti sui post che non esistono. E infine, come prima, siamo andando a impostare data e ora su questo. E come prima, stiamo andando a hanno la migrazione inversa sia cadere il tavolo commenti. Così ora se andiamo indietro di qui, stiamo andando per eseguire questa migrazione, artigiano migrate. E ora è applicato questo migrazione che abbiamo appena creato. Quindi, se abbiamo uno sguardo a phpMyAdmin, facciamo, infatti, ora avere una tabella osservazioni che ha la struttura che abbiamo appena specificato. Così come prima, siamo andando a creare un nuovo modello di astrarre la tabella SQL che abbiamo appena creato. Quindi cerchiamo di aggiungere un nuovo file. Stiamo andando a chiamarlo comment.php. E questo è in realtà sta per essere abbastanza semplice, con una piccola modifica da quello che avevamo prima. Così classe Comment estende eloquente. E che cosa stiamo andando di fare qui è di definire una funzione che è il rapporto con gli altri modelli. Quindi stiamo andando ad avere una funzione di palo qui che restituisce questo rapporto. Quindi stiamo specificando che questo appartiene a postare, dicendo che c'è un posto che questo commento appartiene. Questo è in realtà essere P maiuscola per il modello. Ed ora proprio dall'altra vibrazione lato, dobbiamo dire che, hey. Messaggi sono commenti. Così che cosa stiamo andando a fare è definire commenti funzione pubblica. E qui viene restituito questo ha molti commento. Così ora magicamente quando abbiamo un post, siamo in grado di ottenere i commenti degli attributi e sarà popolare con la informazioni dal database. Quindi cerchiamo di realmente passare attraverso e aggiungere una nuova funzionalità al nostro file view in modo che possiamo entrambi visualizzazione e creare commenti. Quindi stiamo andando a definire una nuova sezione. Diciamo solo che separano con una linea orizzontale. Sezione id = "commenti". Quello che faremo qui è, come prima, scorrere tutti i commenti. Così in realtà come facciamo questo è, come ho già detto, abbastanza magico. Facciamo inviare commenti. E allora possiamo fare questo per ogni ciclo su ciascuno dei commenti. E quello che stiamo andando a fare è div class commento, e stiamo andando a realtà stampare questo commento. Quindi visualizzare che hey, commento nome-- la persona che ha postato questo comment-- dice dot dot dot. Stiamo andando a mettere questo in un blocco preventivo, solo per farlo sembrare bello. E poi commentare contenuti preventivo blocco. E foreach. Così ora questo sta per ciclo attraverso tutti i commenti che è associato con ciascuno dei messaggi e visualizzare ciascuna di queste osservazioni. Ho intenzione di aggiungere un'altra sezione in basso qui, che ci permette di aggiungere un commento. Classe Così h3. Mettere un titolo qui. Aggiungi un commento. E stiamo andando a definire una nuova forma. Così come prima, siamo intenzione di fare form action. E qui, la nuova azione è che siamo andando a definire un nuovo controller che ci permette di rispondere a postare le richieste per la creazione di commenti. Così URL :: percorso createComment. Ho intenzione di passare nel parametro qui. L'ID del post che stiamo creando commento. E poi il metodo della presente modulo sta per essere posta. Ora stiamo andando ad aggiungere in una due campi, gruppo modulo. Questo sarà un ingresso con nome "nome" e class = "forma-control", type = "text", e con la segnaposto = "Il tuo nome". Stiamo anche andando a definire un altro campo modulo, che sta per essere un testo zona come avevamo prima. Proprio come prima, lo chiamano il contenuto. Class = "forma di controllo." Segnaposto = "Scrivi qui". E proprio così che abbiamo può effettivamente sottopone, submit tipo e class = "btn btn-primario." Chiudere il modulo. Chiudi questa azione. Così ora se si aggiorna la pagina dove abbiamo, per esempio, un posto particolare. Dobbiamo riavviare il server. PHP artigianale servire. Riavviare questo. Dobbiamo definire il percorso. Ma per ora, limitiamoci a prendere questo in modo che si possa effettivamente dimostrare ciò che la pagina assomiglia, e poi saremo effettivamente creare quel percorso. Quindi, hey. Abbiamo questa nuova forma qui in modo che possiamo creare commenti. Quindi cerchiamo di definire una realtà funzione all'interno del controller in modo da poter aggiungere commenti. Torniamo. E all'interno blogcontroller.php, quello che stiamo andando a fare è creare una nuova funzione chiamato creare commento. Funzione createComment pubblica. Questo sta per avere un unico parametro, l'ID dei posti che stiamo commentando. E come prima, siamo andando alla prima ottenere il posto. Così postare, findOrfail id. In seguito, stiamo andando per creare un nuovo commento. Così commenta = new Comment. Commento name = ingresso :: get nome. Commento content = stessa nuova linea in pause di ingresso :: ottenere contenuti. E, infine, stiamo andando ad avere per associare questo commento con il post. Quindi stiamo andando a utilizzare questa funzione, commenti, che permette di risparmiare questo rapporto. Così ora questo commento avrà automaticamente l'id. Potremmo anche impostarlo manualmente, ma questo è più facile da leggere fino come funzione va. E dopo eseguiamo questo, che cosa vogliamo fare è reindirizzare l'utente al via indicata dalle viewPost con la matrice con la parametro l'id. E ora in modo che questo effettivamente funzioni, abbiamo bisogno di definire questo percorso. Percorso :: posta. E ora stiamo andando a chiamare questo dopo taglio su ID barra commento. Array utilizza la nuova funzione che abbiamo appena creato. BlogController. CreateComment come createComment. Grande. Così ora si spera, se aggiornare questa pagina e aggiungere in un commento, ad esempio, David Malan. "Speriamo che questo funziona." Submit. Noi, infatti, abbiamo un commentare questo post del blog. Freddo. Così ora abbiamo una abbastanza funzionale post sul blog. Stiamo solo andando a aggiungere un paio di modifiche così che abbiamo un po 'di utile informazioni su questi posti. Quindi, se torniamo al prima pagina, non abbiamo alcun senso di quanti commenti sono su ciascuno di questi messaggi. Così che cosa stiamo realmente andando di fare è, dentro il nostro modello, definire una funzione di supporto che permette noi di specificare il numero di commenti che andare con un determinato posto. Quindi stiamo andando a creare una funzione di supporto. Funzione pubblica. GetNumCommentsStr. Quindi una stringa che specifica il numero di commenti che vanno con esso. E quello che andremo a fare è dire che num = questo commento è importante. Quindi stiamo andando a contare il numero di commenti. E se questo numero è uguale a 1, siamo solo andando a ritornare 1 commento. E poi altrimenti, vogliamo tornare la concatenazione di num e commenti, in modo da ottenere la pluralizzazione corretta. Basta fare questo una sola offerta. Un commento. E ora siamo in grado di utilizzare questa funzione direttamente all'interno del nostro punto di vista. Quindi, se torniamo al posti parziali che abbiamo creato, ora vogliamo realmente visualizzare il numero di commenti. Che cosa possiamo fare è posta, utilizzare questa funzione che abbiamo appena creato a visualizzare il numero di commenti. Quindi, se ora aggiorniamo, esso fa, infatti, mostra i commenti numero che vanno con esso. Se volessimo essere di fantasia se si in realtà guardare il codice di distribuzione, possiamo effettivamente collegare questo per i commenti. Se vi ricordate, abbiamo definito nel vedere che questo ha commenti sezione ID. Quindi, se abbiamo effettivamente voluto collegare direttamente alla sezione commenti, cosa noi facciamo qui è a href URL del viewPost percorso. Passate il ID matrice di posta ID. E poi vogliamo andare a in particolare la sezione commenti. Qui cerchiamo di chiudere la A tag. Così ora se ci rinfreschiamo questa pagina, si clicca su questo. Andremo direttamente la sezione commenti. Se avessimo un post più lungo, è possibile effettivamente vedere questo rimbalzo verso il basso. Ma si noterà che è Non nella parte superiore della pagina. Freddo. Grande. Quindi questo è un abbastanza semplice esempio di qualcosa di semplice che si può fare con Laravel. Ma si può notare qui che abbiamo fatto un sacco di cose con abbastanza piccola quantità di codice. Laravel ci permette di fare il Query SQL dietro le quinte. Si fa il risanamento per noi dietro le quinte. Ci permette di fare queste relazioni molto facilmente senza di noi dover di fare qualsiasi SQL join dichiarazioni unire i commenti con ciò che i posti. Ci permette di fare questo eredità di modelli di modo che possiamo definire questi nidificazione i file in modo non stiamo ripeterci, proprio come quando abbiamo avuto quella visualizzazione dei post del blog che non abbiamo a copiare e incollare il codice. E da qui si può costruire applicazioni sempre più complesse. Potete immaginare se ci voluto implementare di log-in, potremmo dire, portare in un terzo quadro che ci permette di fare questo. C'è un gruppo di loro che sono veramente, veramente grande che può fare come, il recupero della password. E ti invieremo un reimpostare la password di posta elettronica. Siamo in grado di implementare il permesso in modo che io possa creare un post, ma qualcun altro non può modificarlo. Siamo in grado di implementare funzionalità per eliminare i messaggi. Ma potete vedere qui che abbiamo abbastanza molto tutti i componenti rudimentali per costruire alcuni davvero, davvero, applicazioni web dinamiche ed eccitanti. E con questo, penso che siamo buoni. Voi ragazzi avete delle domande? Sì? SPEAKER 3: Come si fa ottenere contenuto statico? ERIC OUYANG: il contenuto statico. Quindi, mentre prima, quando avevamo questo qui, questo contenuto il layout, vista marca, abbiamo avuto questo senza che questo array seguito. Blog.index, abbiamo avuto questo come solo un file statico. Quindi, se non passiamo nulla lungo di esso, sarà solo rendere direttamente il codice HTML. Ma se passiamo in questo associativa serie di posti, che è dinamicamente tirato dal database, può rendere la pagina dinamica. Freddo. Altre domande? SPEAKER 3: Come confrontare Laravel ad forse alcune altre opzioni? ERIC OUYANG: Certo. Sì. Così Laravel è-- questo è un grande interrogo una delle molte opzioni per framework web. Così Ruby on Rails è uno che è popolare. Credo che Twitter usato per essere realizzato con Ruby on Rails. Penso che abbiano dato accesi. C'è un altro chiamato FuelPHP. Così Ruby on Rails usa il linguaggio Ruby e implementa un sacco di roba MVC che vediamo qui. FuelPHP è un altro framework PHP. Django è uno dei miei preferiti. Si tratta di un framework web per Python. Così è possibile scrivere la vostra applicazione web in Python. Quindi c'è un sacco di queste opzioni. Laravel, credo, da e grande è il mio preferito a destra ora PHP solo perché dei componenti di cui abbiamo parlato in precedenza. E 'Composer attivato. Esso comprende un davvero sistema ORM espressivo. Inoltre dispone di un template davvero impressionante linguaggio che alcuni degli altri solo non forniscono. E migrazioni. Le migrazioni sono impressionanti pure. Freddo? Impressionante. Beh, grazie mille per guardando questo seminario, e buona fortuna per i vostri progetti finali.