[REPRODUCCIÓ DE MÚSICA] ERIC Ouyang: Hey, tothom. Benvingut. Es tracta de l'edifici dinàmic Aplicacions Web amb Laravel. El meu nom és Eric Ouyang. Sóc un estudiant de segon any estudiant ciències socials amb una secundària en ciències de la computació, i visc a Adams Casa aquí a Harvard. Així Laravel, en la seva forma més bàsica, és un marc d'aplicació web MVC. Així que t'agradi el que vostès tenen estat fent amb CS50 Finances, Laravel és un marc que permet que li permet construir aplicacions web dinàmiques. Així que vostè pot pensar en ell en alguns sentits com una extensió del tipus de coses que has estat fent en CS50 Finances, sinó un sistema que és molt més robust, molt més elegant, en alguns sentits, i proporciona una gran quantitat de funcionalitat per a vostè per construir bastant complex aplicacions web. Així que anem a anar a través d'alguns de les principals característiques, i després anem a bussejar en un exemple de construcció d'un bloc aplicació amb Laravel. Així que una de les primeres coses que el diferencia de tipus MVC de treball que vostè ha estat fent amb CS50 és que inclou un motor de ORM. Així ORM significa objecte mapatge relacional. Així que això li permet construir una capa d'abstracció entre la base de dades i els seus controladors. Així que a diferència de CS50 Finances on directament realitzar consultes, la capa ORM li permet abstracta que de distància i crear models que són més poderosos que pot directament amb consultes SQL. Una altra cosa que és realment és útil plantilles heretables. Així que vostè notarà en CS50 Finances, acabes reescriure un munt de coses, on col·loca vostè podria potencialment reutilitzar les coses, no ets capaç de fer-ho. Així que aquí a Laravel, pot utilitzar el que hi ha conegut com el motor de plantilles fulla per crear un disseny mestre. I a partir d'aquí, es pot heretar de manera que els sub-plantilles pot en realitat incloure elements dins de que major plantilla base. Migració. Així que això és una sèrie de característiques bastant estàndard en la majoria dels entorns d'aplicacions web modernes. Així que això li permet representar canvis en l'esquema de base de dades en codi. Així que sense anar a dir, phpMyAdmin, en realitat es pot crear aquestes migracions on Representes a la base de dades esquema de canvis en el codi directament. I això li permet A-- especialment si té diverses persones que treballen en el mateix application-- web realitzar un seguiment d'aquests canvis, dir en GitHub, o algun altre dipòsit. Així que això és realment útil i mitiga la necessitat a, per exemple, passar al voltant d'un munt de SQL abocadors. I, finalment, Composer és una cosa molt, molt útil que li permet utilitzar un altre codi de la gent per fer coses impressionants. Així Laravel del estructurada com diversos paquets compositor. Així que dius si volia portar en un paquet d'autenticació o si vostè vol portar una mica de tipus de script generador o un administrador interfície, pot connectar i jugar aquests components amb Composer. Així que anem a començar. Qualsevol pregunta de vostè nois abans de començar? No hi ha preguntes? Fresc. Així que el primer pas és instal·lar Compositor. Així Composer li permet gestionar aquestes dependències, si és el marc Laravel o alguna altra extensió tercers. El primer ordre permet descarregar Compositor, i el segon comandament que permet a moure'l a la carpeta bin locals pel que pot executar Compositor directament a través del terminal. Després d'això, seguir endavant i crear un nou projecte Laravel. Estem realment va a utilitzar un codi d'exemple que he ajuntat per crear aquest bloc. Però si vas a començar des zero, seria utilitzar aquesta comanda fins aquí, compositor crear projectes, Laravel slash Laravel, i després el nom del seu projecte. I això va a incloure tot el codi de distribució per iniciar un nou projecte Laravel. Així que per als projectes finals CS50, podràs Probablement vulgui utilitzar aquest ordre. Però anem a començar amb això. Així que una vegada que has fet que, vas a aconseguir un nombre bastant extensa d'arxius en blog50. Així que anem a anar a través de alguns d'aquests components. Es donarà compte en aquesta ruta directori, hi ha una carpeta d'aplicació. Dins de la carpeta d'aplicacions, hi ha un parell de carpetes útils. Cal destacar que començar amb és aquesta carpeta config. Així que aquest estableix com la seva aplicació web és anar a, per exemple, autentificar les persones o coses en efectiu o es connecten a la base de dades. I el que és realment útil és que Laravel li permet configurar diferents entorns de desenvolupament. Així que el que hem fet aquí és que si anem sota de la carpeta local, hi ha un arxiu database.php. I t'adonaràs que estem aquí configurar una connexió MySQL que permet que les persones es connectin al servidor MySQL que és directament en l'aparell CS50. I estem connectant a una base de dades que configura vaig trucar Blog50. Així que seguirem endavant i realment executar la versió de treball d'aquest, només per tenir una idea del que el aplicació que estem construint sembla. Així que tinc una còpia de aquest Blog50 completat. Així que en realitat Laravel ha construït en un servidor que es pot executar directament des de la línia d'ordres. Així que aquest és similar a la PSet abans quan realment construir el seu propi servidor en C. Així que han construït un a la que pot executar les seves aplicacions Laravel directament des de la línia d'ordres. Així que si ho fem php artesanal servir, aquesta posarà en marxa un servidor de desenvolupament al port 8000. Així que si anem al host local 8000, t'adonaràs que, hey. Tenim el nostre bloc en marxa i funcionant. Així que aquí està generant Laravel la primera pàgina del nostre bloc. Aplicació molt simple. Però hi ha un parell característiques realment enginyoses que proporciona sota la campana. Així que de l'aplicació de bloc senzill. Si volguéssim crear un lloc, podem fer clic en aquest botó. Podem dir: "Hey, tothom. Aquest és un molt divertit seminari, "per exemple. I escriure alguna cosa aquí. Text aquí. Si ens clic a Enviar, vostè compte que el nostre nou bloc ja s'ha afegit a la portada del bloc. Si tornem aquí, et donaràs compte que ha hagut alguns comentaris ja al bloc. Així que si ens desplacem cap avall, podràs observi que Jonathan Tan diu que estava molt intrigat per aquest post. Així que anem a entrar en com objecte mapatge relacional permet que facis aquestes relacions en una manera bastant transparent també. Fresc. Una pregunta sobre la funcionalitat del que construirem? Fresc. Així que comencem amb realitat la creació de les taules de la base. Així recordar que en CS50 Finances, que armar una taula per als usuaris així com per a la accions en la seva cartera. Així com hem esmentat anteriorment, el que fem servir en Laravel és una cosa que es coneix com les migracions. Així que si ens remuntem a la codi de distribució aquí, la primera ordre que és útil que Laravel li proporciona És aquesta comanda migrate. Així que podem fer migrar artesanal php: fer. Així que això ens permet crear una migració. I després anem a voler per crear una migració anomenat create_posts_table, que va estar on anem a ser emmagatzemar els nostres posts. I es donarà compte aquí que s'executi a través d'algun codi que realment genera un arxiu amb una marca de temps en ell. Així que si anem i mirem a base de dades, notem sota Migracions que ha creat un arxiu en blanc per a nosaltres, que té codi repetitiu amb el nom que hem especificat, crear llocs de la taula. I té dues funcions al mateix. Up és el que volem executar quan el la migració s'aplica a la base de dades. I a sota és el que farem quan volem revertir una migració. Així que aquí anem a començar a terme amb l'escriptura d'aquesta migració. Així que hi ha una classe útil en Laravel anomenat esquema. Així que anem a córrer esquema :: crear. I crearem una taula anomenada llocs. I aquí apliquem aquesta utilitzant una funció. I dins d'aquí, anem a realitat especificar el contingut de la nostra taula. Crearem un document d'identitat, que és d'increment automàtic. A més, anem per crear un camp que representa el títol del nostre bloc. També crearem un camp per emmagatzemar el text de la nostra entrada al bloc. I, finalment, anem per guardar algunes marques de temps per a la qual es va crear el nostre post i quan s'ha actualitzat. I per sota, és bastant simple. Tot el que volem fer és caiguda la taula que hem creat. Gran. Alguna pregunta? Així que ara si anem per davant i- realitat, amfitrió local, m'ho dius a mi esborrar el que teníem abans. Anar a les bases de dades. Vaig a esborrar el que teníem abans. Deixa això i crear una nova base de dades Blog50. Així que ara el que el màgic part és aquí que pot aplicar directament aquestes migracions a la base de dades mitjançant la línia d'ordres eina. Així que si ho fem migren php artesà, t'adonaràs que, hey. Es crea la taula de migració, que anem a fer una ullada a una mica, i s'aplica aquesta primera migració. Així que mirem Blog50, et donaràs compte que ha creat dues taules per a nosaltres. En primer lloc és aquesta taula migracions. Així que si naveguem això, t'adonaràs que aquesta taula és bastant senzill. Simplement diu que, hey. Hem aplicat aquesta migració. Anem enrere i mirar els llocs. Es donarà compte de que l'estructura és exactament el que havíem demanat ella. Comptem amb un ID d'increment automàtic. Tenim una cadena per emmagatzemar el títol, i un camp de text per emmagatzemar el contingut. Gran. Fresc. Una pregunta sobre les migracions treball, com podem aplicar? No? Fresc. Així que ara seguirem endavant i en realitat crear el model. Així que volem crear un model de missatges que emmagatzema una abstracció de la base de dades. Així que en lloc de fer consultes MySQL directament, crearem. Així que hem de crear un carpeta en aquí anomenats models. I aquí dins, anem a crear un arxiu anomenat post.php. Dins d'aquest arxiu PHP, crearem un pal de la classe que s'estén eloqüent. Eloqüent és el nom de la ORM motor que Laravel ofereix. I aquí, podríem esperar que que realment necessita per escriure una mica de codi. Anem a escriure alguns funcions auxiliars posteriors. Però fora de la caixa, això ja ho farà Reconèixer el que està a la base de dades i podem accedir, per exemple, el text de la nostra entrada al bloc o al títol, i crear coses directament amb gairebé cap codi en absolut. Així que aquest és un dels components màgics. I el vent una vegada que aquesta classe està més en tota regla, anem a incloure informació sobre el que que està relacionat amb, de manera que els comentaris. També crear una funció perquè puguem realment obtenir directament la URL d'una pàgina bloc. Fresc. Una pregunta sobre això? No. Fresc. Així que ara, una vegada que tenim el nostre model, que vulgueu crear un controlador que és capaç d'interactuar amb aquests models, i, posteriorment, la base de dades. Així que si fem una ullada a BlogController, podràs observi que no hi ha molt aquí en aquest moment. Tot el que hi ha és una funció d'índex que genera la pàgina principal, però sense res allà per mostrar. Així que la primera funció que crearem és aquella que ens permet per crear una entrada al bloc. Així que anem a declarar una nova funció anomenada newPost. I aquí dins, simplement, anem per configurar la mida d'aquesta pàgina ser un render versió, si vostè recorda de CS50, d'aquesta plantilla anomenada blog.new, que crearem en una mica. Es donarà compte de que aquí a la línia sis que especifiquem aquesta variable, el disseny. I si fem un cop d'ull a la carpeta Vistes, hi ha una carpeta Layouts, que inclou un arxiu HTML molt bàsic. I, per nota, et donaràs compte que tenim aquest contenidor aquí que produeix contingut. Així que dins de la nostra plantilla el que farem és crear el que serà substituït directament dins d'aquest disseny. Llavors vam dir que volem fer una plantilla anomenada blog.new. Però dins de Blog, hi ha encara no aquesta nova plantilla. Així que anem a crear un arxiu anomenat new.blade.php. Això li diu que Laravel aquest arxiu PHP ha de ser prestats amb la motor de la plantilla del full. Així que això és bastant arxiu senzill. Serà la forma per la qual en realitat ens sumem a un bloc. Així que la màgia aquí des del l'herència és que, hey. Volem precisar que la secció, la secció de contingut aquí, que queda delimitat porsection ystop. Així que el que està en entre aquí va a ser substituït en el disseny mestre. I aquí el que volem fer és molt simple crear un nou fitxer HTML. Anem a afegir un títol ràpid. Afegir una entrada de bloc. I dins d'ella, estem crearà un formulari. Aquesta forma tindrà una acció. I això serà una cosa que substituïm en endavant, i veurem com enrutament encaixa en aquí. Però només definirem de moment que aquest va a una URL amb la ruta des createPost. I llavors això va tenir mètode POST. Dins d'aquí, anem tenir dos camps. Div class = "forma-grup". Estem utilitzant la biblioteca Bootstrap CSS gentilment proporcionada per Twitter. Així que anem a crear dos d'ells. Així que aquesta primera entrada és serà el títol. Així que el nom d'entrada = "title". Class = "FormControl". Type = "text". Vaig a afegir un marcador de posició = "Title". I llavors el segon és serà una àrea de text. Name = "contingut". Class = "FormControl". I marcador de posició = "Introduïu aquí". Cal anar. Finalment, anem a afegir un botó d'accés ràpid enviar. Type = "submit" class = "btn btn-primària". Així que aquests són tots característiques de Bootstrap el que aquest es pot col·locar en una manera que és presa per l'usuari, en lloc d'HTML nu. Així que hem definit el controlador aquí. Hem definit una visió molt simple. Però el que cal és el teixit connectiu. Així que en aquest punt, Laravel té ni idea de com anem a realitat accedir a aquest controlador. Així que aquest es defineix en una arxiu anomenat routes.php. I ara mateix, tenim una ruta. Que és quan anem a la camí a casa d'aquest lloc web, que farà el controlador d'índex. Així que aquí el que hem de fer és posar en pràctica una nova ruta per a nosaltres per crear un pal. Així que fem servir aquest mètode aconseguir, que especifica que quan un usuari intenta aconseguir aquest page-- específicament el càrrec slash nova page-- el que farem s'utilitzi el controlador anomenat BlogController nou lloc. La que acabem de crear. I després anem posar un àlies com newPost. Anem a crear un altre funció en una mica. Però el que hi ha aquí sota la clau "com" és el que podem substituir dins les nostres plantilles de fulla. Així que per ara, anem a en realitat també dir ruta. Així també anem per crear un controlador de manera que podem crear aquests llocs. Així que si un usuari publica per al càrrec pàgina SLASH nou, el que farem és utilitza un controlador que crearem en breu anomenat BlogController a createPost. I anem a àlies això amb createPost. Fresc. Alguna pregunta? Fresc. Així que anem a executar el que tenim fins ara. Així que si ho fem php artesanal servir, anem a veure un munt d'errors. Així que sembla que tenim una error de sintaxi en les rutes de la línia 27. Ah. Falta un punt i coma. Així que si ens anem a 8000, veuràs res aquí encara. Així que aquesta és la pàgina d'inici predeterminada. Però si anem a publicar retallar nou, sent. Serà la manera que acabem de crear. En aquest moment, no tenim implementat la funcionalitat de quan pressionem el botó Envia. Així que si fem clic al Presentar botó, es va a executar un error. Però anem a codi que en aquest moment, precisament, el que voler fer quan un usuari sotmet aquest formulari. Així que farem això. Tornar a l'arxiu de controladors. El que farem és implementar aquesta nova funció que ens permet crear un post. Declarar nova funció. CreatePost funció pública. I aquesta funció serà un poc més sofisticat que el que teníem abans. Però veuràs aquí que no estem va a escriure en realitat qualsevol SQL. El ORM, el Eloqüent ORM, permetrà que fem això d'alguna formes una forma més elegant. Així que anem a crear un nou lloc. I aquí estem instanciar un nou objecte a partir del model que acabem de creat, el model posterior. I el que farem és establir la atribut títol d'aquest ús d'alguna cosa que obtenim des del servidor. Així que això és similar al que teníem abans a CS50 Finances on anàvem a fer, utilitzant el Súper Global Post buscant títol. Així Laravel ofereix serveis de sanejament i altres coses l'ús d'aquesta funció auxiliar. Així que preferim utilitzar aquest lloc d'aquesta manera crua molt bàsic de PHP. I llavors, què farem és establir el contingut de la mateixa a l'Entrada obtenir contingut. Estem realment va a embolicar això en una funció útil PHP que proporciona diu nl2br, que Resulta noves línies, NLS, a sa, trencaments, perquè puguem tenir en realitat diferents apartats dins d'ella. I finalment el que anem de fer és guardar aquest post. Així que cridem a la funció estalviar en aquest model. Anem a guardar la publicació. I finalment el que farem es redirigeix ​​l'usuari específicament a la ruta que anem a crear en breu, àlies viewPost. I anem a passar en els arguments id, sent l'id d'aquest nou lloc. Gran. Així que ara si realment anem i correm això. Anem a afegir un nou lloc. Diguem que aquest és el seminari 50. I dir, segur. ASDL. El que Sea. Algun tipus de contingut. I enviar-lo. I ens vam adonar que, sent. rutes no definides. Però si fem una ullada a phpMyAdmin i buscar si la nostra funció va fer res. Mira missatges Blog50. Ens adonarem que, hey. De fet, només va crear aquest bloc Publicació de les marques de temps segons l'especificat. Així que ara anem a tornar i en realitat creen aquesta altra funció en el nostre controlador, específicament el controlador viewPost. ViewPost funció tan públic. Així que aquí el que farem, en lloc de tenir parèntesi buits, anem a voler passar a l'ID de el lloc que estem creant. I a partir d'aquí el que farem és en realitat consultar la base de dades per a això. Així que si nosaltres publiquem, hi ha una funció anomenada Troba que ens permet consultar per ID. En concret, en realitat, anem a utilitzar una versió alternativa d'aquest anomenat Troba o Fail, que ens permet per deixar de sortir d'aquesta funció, llançar una excepció si l'ID passem en què no existeix. I després farem alguna cosa similar al que vam fer anteriorment on muntem el contingut d'aquesta pàgina per estar la versió renderitzada d'aquesta nova visió que crearem, blog.view. I anem a passar a la it-- Igual que en el CS50 fer function-- un diccionari de variables. Les claus d'aquest array associatiu convertit en variables dins de la plantilla. Així que anem a fer que pal. Així que passar indirectament el lloc que hem va preguntar des de la base de dades. . Ara el que anem a fer és crear aquest punt de vista pel que podem veure en realitat les entrades del bloc que hem construït. Així que anem a crear un arxiu anomenat view.blade.php. Així que dins d'aquesta plantilla, el que farem està creat una pàgina simple que ens permet mostrar el contingut. Així que fem secció, això és abans de contingut. Aturi. I el que anem de fer dins d'aquí és escriure alguna cosa d'HTML per mostrar aquesta pàgina. Així que anem a embolicar amb una fantasia nou element HTML5 anomenat article. I aquí, anem tenir una capçalera on anem a simplement tenir un h1, que inclou el títol de l'entrada. Així que aquí, si ens fixem en aquest doble notació claudàtor, això farà essencialment Php echo títol de l'entrada. Així que és una abreviatura útil que Laravel ens proporciona. Així que utilitzarem aquesta notació al seu lloc. I aquí, anem a també imprimir el contingut de la mateixa. I aquí, anem a veure el contingut del post. I a sota en el fons del que som farem és crear un peu de pàgina. I al peu de pàgina, anem a primera pantalla quan aquesta publicació. Així que aquesta va ser publicada, creat el. I Laravel utilitza una molt agradable data biblioteca anomenada Carbon. Així que realment podem fer una cosa anomenada difforHumans que has vist abans. Quan vam publicar. que dirà, com, fa cinc segons. Així que aquest és un molt bon funcionalitat de Laravel. I, finalment, anem per tancar aquest peu de pàgina. Així que ara, si ens remuntem a Home Page anem per veure res aquí encara perquè no hem codificat la pàgina d'inici. Però si anem a publicar una barra, anem a veure una excepció. Algú sap per què veiem una excepció? Què ens falta? Alguna idea? Així que el que vam fer nosaltres anteriorment per a nosaltres en realitat per definir com s'arriba a controlador en particular? ALTAVEU 1: La ruta? ERIC Ouyang: Sí. Així que encara hem de definir la ruta. Així que tornem aquí per routes.php. Es donarà compte de que en realitat no han definit com anem a aconseguir a aquest controlador. Així que ara anem a definir aquesta ruta. És bastant senzill, similar al que vam fer abans. Però el que notarem aquí és que tindrem un marcador de posició. Així que si ho fem route.get lloc slash ID. Així ID ara és el que va a ser aprovat al controlador. Això va a utilitzar el controlador que acabem de creat, BlogController a viewPost. I anem a àlies això com viewPost. Gran. Així que ara anem a crear aquesta ruta. Així que ara si anem aquí i tornar a carregar aquesta pàgina, que, de fet, tenim el nostre nou bloc. Així que això és el que hem creat abans. Molt simple pàgina, però es mostra el entrada de bloc que acabem de crear. Fresc. I si en realitat ens passem pel tot procés de creació d'una nova entrada al bloc, ens adonarem que tot redirigeix ​​correctament. Si dic: "Hola. Sóc Jonathan Tan ". Digui: "Aquest és el meu bloc." I presentar-lo, això crearà aquesta nova entrada al bloc amb ID 2, que els increments del que teníem prèviament i mostra correctament. Impressionant. Alguna pregunta? Sí? ALTAVEU 2: Com maneja Laravel desinfecció i tot per a vostè? ERIC Ouyang: Sí. Així que quan vam veure abans, quan vam entrada de còlon de còlon arribar, que sanitates qualsevol SQL injeccions i altres coses que el que es vol dur a terme si estem un usuari maliciós de la pàgina web. Així Laravel maneja una gran quantitat que darrere de les escenes. Bona pregunta. Així que donem una ullada a la pàgina d'inici. Així que si primer tornem a la controlador de la pàgina principal, t'adonaràs que no fa molt aquí. Es donarà compte de que no som passant a aquest controlador alguna cosa particularment útil. És només aquest fitxer índex. Així que anem a passar a això alguna cosa útil. I específicament, estem passarà en els llocs. I Laravel ens permet fer lloc absolut, el que ens permetrà obtenir tots els missatges. Ara bé, si ens remuntem a index.php, veuràs, hey. Aquí no hi ha res encara. Però el que volem fer aquí és en realitat recórrer, fer un bucle foreach en els llocs que ens permet imprimir els missatges. Missatges Així com foreach ja, el que volem fer s'imprimeix el contingut de l'entrada al bloc. Però una cosa que notaràs és que que en realitat va escriure la major part d'aquest codi Ja, en view.blade.php. Així que el que farem en realitat és utilitzar una bona característica útil de Blade i factoritzar el codi comú. Així que anem. Anem a prendre aquest contingut aquí, i el que farem és crear una nova carpeta. Anem a cridar parcials. I aquí, anem per crear un post.blade.php. Així que aquí, prenem en compte la forma en que volem mostrar aquests missatges. I aquí el que farem en lloc de realment haver de HTML directament, utilitzarem aquesta directiva anomenada inclouen blog.partials.post. I què farem aquí és passar al post de la pàgina. Així que ara si tornem aquí, anem a observi que la funcionalitat és encara el mateix. Però ara tenim aquest un factor fora de codi, aquest codi HTML. Així que podem utilitzar en l'Índex. Així que aquí, això és molt senzill. Tot el que fem és incloure blog.partials.post i matriu. I en algun lloc a abans, fem surten post. Així que ara, si ens remuntem a la pàgina d'inici, anem a veure que, hey. Tenim una llista de tots els entrades de bloc que teníem abans. Podríem voler afegir una mica de "si" condicions i condicions "else" de manera que si no tenim res al bloc, volem mostrar alguna cosa útil. Igual que, hey. No hi ha contingut publicat al bloc. I si vostès realment Mira el codi de distribució a GitHub, veuràs un exemple de com ho fem. Fresc. Alguna pregunta? Sí. ALTAVEU 2: Suposo que simplement una pregunta fonamental. De tornada a la ruta. ERIC Ouyang: Sí. Si fem una ullada a les rutes. ALTAVEU 2: D'on ve el uses.blogcontroller a crear correus, ¿Què ens dirigeixen a? ERIC Ouyang: Sí. Sí. ALTAVEU 2: O el que és que-- ERIC Ouyang: Llavors, fer una ullada, per exemple per exemple, aquesta ruta aquí. La primera part és la real URL que l'usuari va a anar. I aquesta sèrie aquí, matriu associativa, defineix com volem tenir la aplicació acte en resposta a la mateixa. Així que s'utilitza és el controlador, la funció que ens voler cridar quan un usuari va a aquest URL. Així viewPost aquí era un funció que hem definit a l'interior de BlogController-- ALTAVEU 2: Ja veig. ERIC Ouyang: --així que en realitat pot fer que un punt de vista, realitzar alguns càlculs, interactuar amb la base de dades SQL. ALTAVEU 2: OK. ERIC Ouyang: I després l'altre part ", ja que" és un àlies que fem servir. Així que si ens adonem quan hem creat el formulari, t'adonaràs que l'URL :: routecreatePost. Per tant, substitueix en el real URL perquè no som dur codificació d'aquests en el que podem canviar- una vegada, diem si volíem canviar de nom. En lloc de barra posterior nou, volem fer com, p reduir radicalment nou només per netejar les nostres URL una mica. Ens agradaria canviar en un sol lloc en comptes que a través de tots els diferents arxius. Fresc. Això és bo. Així que ara tenim una molt plataforma de blocs bàsica. Probablement ens volem afegir a un botó per que en realitat podem crear nous llocs. Així que si fem un cop d'ull al Layout Master, tenim una secció anomenada Capçalera Dret que només hem definit en la part superior. Així que podem afegir botons a la part superior de la capçalera. Així que si anem a index.blade.php, en realitat fer és definir el que passa a l'interior d'aquí. Així que aquesta secció Capçalera Dret, el que farem és afegir en un botó per anar a la URL definit per la ruta nova entrada. Només per netejar i fer és bonic i tot Bootstrap, farem aquest botó predeterminat. Anem a fer el gran per a la diversió. I dins d'ella, podríem posar una mica de text. Però el Bootstrap proporciona és glyphicons. Així que en realitat podem afegir a aquesta agradable llapis que vam veure anteriorment. Glyphicon. Glyphicon-llapis. Així que això ens permetrà posar en una icona en lloc de text. Ara bé, si ens aturem, aquest definirà aquesta secció. I, sent. Tenim un botó agradable que ens uneix directament al afegir una pàgina de bloc. Així que tenim una bastant simple bloc. Podem afegir coses a la mateixa. Però el que en general esperem dels blocs està comentant. Pel que és realment important per a nosaltres tenir, dir, si algú visita un lloc web i realment li agrada el post que poden participar en el debat amb altres persones que visiten la pàgina. Així que anirem i crear una nova taula de base de dades i un nou model perquè puguem associar comenta amb els pals. Així que el primer pas, igual que abans, és que necessitem per executar una migració. Així com abans, ho fem php artesanal migren: fer. I crearem una anomenat create_comments_table. Això crearà un fitxer que té la nostra nova migració. I anem a, com abans, definir una nova taula. Així esquema :: crear un taula qualificar els comentaris. Aquesta funció aquí. I dins d'aquest quadre el que farem és primer, com abans, assigni un ID. Incrementa ID. Permetrem que els usuaris associïn el seu nom amb un comentari particular. Tindrem una mica de contingut que va de la mà amb això, el contingut del text. I aquí el que anem a fer és una mica diferent. Crearem un enter això es diu post_id que significarà el lloc un comentari en particular va amb. A més, de fet anem a establir una restricció de clau externa en això. Així MySQL farà complir això. No estem tractant de assignar comentari nombre 5 per a publicar 5000 si no tenim tenia 5.000 llocs en ell. Així que el que fem aquí, fem post_id estrangera estarà associat amb el camp ID dels llocs de la taula. I que en realitat farem alguna cosa una altra cosa útil, és onDelete. Així que si esborrem alguns Publicació de la base de dades, que volem connectar en cascada la esborra els comentaris també. Perquè no és molt útil per a nosaltres tenir comentaris en els posts que no existeixen. I, finalment, igual que abans, estem va a establir marques de temps en això. I igual que abans, anem a té la migració inversa sigui eliminar la taula de comentaris. Així que ara si ens remuntem d'aquí, anem per executar aquesta migració, migrar artesanal. I ara s'aplica aquest migració que acabem de crear. Així que si tenim una ullada a phpMyAdmin, que fem, de fet, ara tenir una taula de comentaris que té la estructura que només hem especificat. Així com abans, estem crearà un nou model abstreure la taula de SQL que acabem de crear. Així que anem a afegir un nou arxiu. Anem a cridar comment.php. I això és en realitat serà bastant directa, amb un lleuger canvi del que teníem abans. Així classe Comment estén eloqüent. I el que anem de fer aquí és definir una funció que és la relació amb altres models. Així que tindrem una funció posterior aquí que torna aquesta relació. Així que estem especificant que això pertany a publicar, dient que hi ha un lloc que aquest comentari pertany. En realitat, això ha de ser P majúscula per al model. I ara just a l'altre flip banda, hem de dir que, hey. Missatges tenen comentaris. Així que el que farem és definir els comentaris de funció pública. I aquí es torna Això té moltes comentari. Així que ara per art de màgia quan tenim un post, podem obtenir els comentaris d'atributs i que va a omplir amb el informació de la base de dades. Així que anem a anar a través de realitat i afegir una nova característica al nostre arxiu de vista de manera que poder tant a la pantalla i crear comentaris. Així que anem a definir una nova secció. Anem a la separen amb un regle horitzontal. Secció id = "comentaris". El que farem aquí és, com abans, iterar a través de tots els comentaris. Així que en realitat la forma en què fem això és, com ja he dit, bastant màgic. Fem enviar comentaris. I després podem fer això per a cada bucle sobre cadascun dels comentaris. I què anem a fer és div class comentari, i anem a realitat imprimir aquest comentari. Així que mostrar que sent, comentar nom-- la persona que va col·locar aquest comment-- diu dot dot dot. Anem a posar això en un bloc cita, només perquè es vegi bonic. I després comentar cita de bloc de contingut. I foreach. Així que ara això va a loop a través de tots els comentaris que està associat amb cadascun dels llocs i mostrar cada un d'aquests comentaris. Vaig a afegir una altra secció baix aquí, el que ens permet afegir un comentari. Així classe h3. Posi un títol aquí. Afegir un comentari. I anem a definir una nova forma. Així com abans, estem farem una acció de formulari. I aquí, la nova acció és que estem definirà un nou controlador que ens permet respondre a publicar les sol·licituds de creació de comentaris. Així createComment URL :: ruta. Vaig a passar en el paràmetre aquí. La identificació del lloc que estem creant comentari sobre. I a continuació, el mètode d'aquesta manera serà lloc. Ara anem a afegir a un dos camps, el grup forma. Això serà una entrada amb el nom "nom" i class = "-control de formulari", type = "text", i amb la marcador de posició = "El teu nom". També definirem un altre camp de formulari, que serà un text àrea, ja que teníem abans. Igual que abans, en diuen contingut. Class = "control de la forma". Marcador de posició = "Introduïu aquí". I de la mateixa manera que ens en realitat pot enviar-lo, submit tipus i classe = "btn btn-primària." Tanqueu el formulari. Tancar aquesta acció. Així que ara si tornar a carregar aquesta pàgina en tenim, per exemple, un lloc determinat. Hem de reiniciar el servidor. PHP artesanal servir. Reinicieu això. Hem de definir la ruta. Però per ara, anem a prendre aquest de manera que en realitat li podem mostrar el que la pàgina s'assembla, i després que en realitat a crear aquesta ruta. Així que, hey. Tenim aquesta nova forma aquí baix perquè puguem crear comentaris. Així que anem a definir una realitat funció dins del controlador perquè puguem afegir comentaris. Tornem. I dins d'blogcontroller.php, el que farem és crear una nova funció anomenada crear comentari. Funció createComment Pública. Això tindrà un sol paràmetre, l'ID dels missatges que estem comentant. I igual que abans, estem arribarà primer al pal. Així de publicar, Identificació findOrfail. Després, ens anem per crear un nou comentari. Per tant comentari = new comentari. Comentari name = Entrada :: get nom. Contingut Comment = la mateixa línia nova en les pauses d'entrada :: get contingut. I, finalment, anem a haver de associar aquest comentari amb el lloc. Així que utilitzarem aquesta funció, comentaris, que ens permet estalviar aquesta relació. Així que ara aquest comentari tindrà automàticament l'ID del missatge. També podríem configurar- manualment, però això és més fàcil de llegir en la mesura ja que la funció va. I després realitzem això, el que vull fer és redirigir l'usuari a la ruta especificada per viewPost amb la matriu amb el paràmetre de la ID del missatge. I ara perquè aquesta realitat funcions, hem de definir aquesta ruta. Ruta :: lloc. I ara anem a trucar a aquest ja slash slash ID comentari. Matriu utilitza la nova funció que acabem de crear. BlogController. CreateComment com createComment. Gran. Així que ara espero que si refresquem aquesta pàgina i afegir en un comentari, per exemple, David Malan. "Esperem que això funciona." Enviar. Nosaltres, de fet, tenim una comentar en aquest bloc. Fresc. Així que ara tenim un bastant bloc funcional. Només anem a afegir un parell de retocs per que tenim una mica més útil informació sobre aquests missatges. Així que si ens remuntem a la primera pàgina, no tenim cap sentit de la quantitat de comentaris són en cada un d'aquests llocs. Així que el que estem realment va de fer és, dins del nostre model, definir una funció auxiliar que permet ens permet especificar el nombre de comentaris que van amb un lloc determinat. Així que anem a crear una funció auxiliar. Funció pública. GetNumCommentsStr. Així que una cadena que especifica el nombre de comentaris que van juntament amb ella. I el que farem és dir que num = aquesta comentaris compte. Així que anem a comptar el nombre d'observacions. I si aquest nombre és igual a 1, estem només va a tornar 1 comentari. I després una altra cosa, volem tornar la concatenació de num i comentaris, per la qual cosa tenim la pluralització correcta. Simplement feu d'això una única oferta. Un dels comentaris. I ara podem utilitzar aquesta funció directament dins de la nostra visió. Així que si ens remuntem a la missatges parcials que hem creat, ara volem realment mostrar el nombre de comentaris. Així que el que podem fer és posterior, utilitzeu aquesta funció que acabem de crear a mostrar el nombre de comentaris. Així que si ara ens refresquem, que fa, de fet, la pantalla els comentaris de nombres que van juntament amb ella. Si volguéssim ser de luxe si realment mirar el codi de distribució, en realitat podem vincular això als comentaris. Si vostè recorda, hem definit dins de la veure que això no té comentaris secció d'identificació. Així que si en realitat volia vincular directament a la secció de comentaris, el que volem fer aquí és a href URL del viewPost ruta. Passi el ID varietat d'ID de missatge. I després volem anar a específicament la secció de comentaris. Aquí anem a tancar l'etiqueta A. Així que ara si refresquem aquest pàgina, fem clic sobre aquest. Anirem directament a la secció de comentaris. Si tinguéssim un post més llarg, es pot veure realment aquest rebot cap avall. Però t'adonaràs que és no en la part superior de la pàgina. Fresc. Gran. Així que això és un bastant senzill exemple d'alguna cosa senzill que es pot fer amb Laravel. Però vostè pot notar aquí que hem fet un munt de coses amb força poca quantitat de codi. Laravel ens permet fer la Consultes SQL darrere de les escenes. Es fa el sanejament per a nosaltres darrere de les escenes. Ens permet fer aquestes relacions molt fàcilment sense necessitat fer qualsevol SQL unir declaracions a combinar comentaris amb el que els llocs. Ens permet fer això herència de plantilles de manera que podem definir aquests implantació arxius, així que no estan repetir-nos, igual que quan vam haver visualització de les entrades del bloc que nosaltres no hem de copia i enganxa el codi. I a partir d'aquí es pot construir aplicacions cada vegada més complicats. Es pot imaginar si volgut posar en pràctica per accedir al sistema, podríem dir, portar a un tercer marc que ens permet fer això. Hi ha un munt d'ells que són molt, molt gran que pot fer, com, recuperació de la contrasenya. I és que una enviarà restablir la contrasenya de correu electrònic. Podem implementar permís de manera que pugui crear un lloc, però algú més no pot editar-lo. Podem implementar funcionalitat per esborrar els missatges. Però vostè pot veure aquí que tenim prou tant tots els components rudimentaris per construir alguns molt, molt, aplicacions web dinàmiques i emocionants. Així que amb això, crec que estem bé. Vostès tenen alguna pregunta? Sí? ALTAVEU 3: Com et obtenir contingut estàtic? ERIC Ouyang: El contingut estàtic. Així que vostè va veure abans que quan vam tenir això d'aquí, aquest contingut de disseny, vista maquillatge, vam tenir aquest sense aquesta matriu després. Blog.index, vam tenir aquest només com un arxiu estàtic. Així que si no aprovem res al llarg d'ella, només va a representar l'HTML directament. Però si passem en aquest associatiu varietat de llocs, que és dinàmicament tret de la base de dades, ens pot fer que la pàgina dinàmica. Fresc. Alguna altra pregunta? ALTAVEU 3: Com compararia Laravel que potser algunes altres opcions? ERIC Ouyang: Segur. Sí. Així Laravel és-- això és una gran pregunta-- una de les moltes opcions per als frameworks web. Així Ruby on Rails és una que és popular. Crec Twitter solia ser implementat amb Ruby on Rails. Crec que han canviat des de llavors. Hi ha una altra que es diu FuelPHP. Així Ruby on Rails utilitza el llenguatge Ruby i implementa un munt de coses MVC que veiem aquí. FuelPHP és un altre framework PHP. Django és un dels meus favorits. És un framework de desenvolupament web per Python. Així que vostè pot escriure el seu aplicació web en Python. Així que hi ha un munt d'aquestes opcions. Laravel, crec, per i gran és el meu dret favorita ara per PHP només perquè dels components que hem parlat abans. És Compositor habilitat. Inclou un molt, molt sistema ORM expressiu. També té una plantilla realment impressionant llenguatge que alguns dels altres simplement no proporcionen. I migracions. Les migracions són impressionants. Refredar? Impressionant. Bé, moltes gràcies per veient aquest seminari, i bona sort en els seus projectes finals.