[Música tocando] ERIC Ouyang: Ei, todo o mundo. Benvido. Esta é a construción dinámica Web Apps con Laravel. O meu nome é Eric Ouyang. Eu son un estudante de segundo ano estudando estudos sociais cun secundario en ciencia da computación, e eu vivo en Adams Casa aquí en Harvard. Entón Laravel, na súa forma máis core, é unha estrutura de aplicación web MVC. Así como o que vostedes teñen está a facer con CS50 Finanzas, Laravel é un framework que permite Lo a construír aplicacións web dinámicas. Así, pode pensar sobre iso nalgúns sentidos como unha extensión do tipo de material ten feito en CS50 Finanzas, pero un sistema que é moito máis robusto, unha gran cantidade máis elegante, nalgúns sentidos, e ofrece unha gran cantidade de funcionalidade para ti para construír bastante complexo aplicacións web. Entón, imos pasar por algúns das principais características, e despois imos mergullar nunha exemplo de construción dun blog aplicación con Laravel. Así, unha das primeiras cousas que diferencia de tipo MVC de traballo que ten feito con CS50 é el inclúe un motor ORM. Entón ORM significa obxecto relacional. Entón, iso permite que constrúe unha capa de abstracción entre a base de datos e os seus controladores. Así, ao contrario do CS50 Finanzas onde ti directamente facer consultas, a capa ORM permite abstracto que lonxe e crear modelos que son máis poderosos que pode directamente con consultas SQL. Outra cousa que é realmente útil é templates herdadas. Entón, vai notar no CS50 Finanzas, acaba reescribir unha morea de cousas, onde lugares que podería potencialmente reutilizar cousas, non é capaz de facer. Entón, aquí no Laravel, pode utilizar o que é coñecido como o mecanismo de modelo de lámina para crear un esquema mestre. E a partir de aí, podes herdar de xeito que os sub-modelos poden, de feito, inclúen elementos dentro este modelo base maior. Migración. Polo tanto, esta é unha características bastante estándar en a maioría dos frameworks de aplicación web modernos. Entón, o que lle permite representar os cambios do esquema da base de datos no código. Así, sen dirán, phpMyAdmin, realmente pode crear estas migracións onde representa a base de datos cambios de esquema no código directamente. E iso permite que a-- especialmente Se ten varias persoas traballando na mesma tea application-- seguir estas modificacións, dicir no GitHub, ou algún outro repositorio. Polo tanto, esta é realmente útil e mitiga a necesidade para, por exemplo, pasar en torno a unha morea de SQL lixeiras. E, finalmente, é Composer algo realmente útil que permite que use outro código das persoas para facer cousas impresionantes. Entón Laravel do estruturada como varios paquetes Composer. Entón, dicir que se quería traer en un paquete de autenticación ou se quere traer algún tipo de script xerador ou un administrador interface, pode plug and play eses compoñentes co compositor. Entón, imos comezar. Calquera dúbida de ti caras antes de comezar? Non hai preguntas? Con estilo. Así, o primeiro paso é instalar Composer. Entón Composer permite que xestionar estas dependencias, se é o cadro Laravel ou algunha outra extensión de terceiros. O primeiro mando permite descargar Composer, eo segundo mando permite que movelo ao cartafol bin locais de modo que pode executar Composer directamente a través do terminal. Despois diso, dalle crear un novo proxecto Laravel. En realidade, estamos indo a utilizar algún código de exemplo que engada para crear este blog. Pero se está empezando do cero, usaría ese mando aquí enriba, compositor crearse proxecto, laravel cortar laravel, e logo o nome do teu proxecto. E que incluirá todos os códigos de distribución para iniciar un novo proxecto Laravel. Polo tanto, para a súa CS50 proxectos finais, vai probablemente vai querer usar este comando. Pero imos comezar con isto. Polo tanto, unha vez que fixo que, está indo para obter un número moi grande de arquivos en blog50. Entón imos pasar por algúns destes compoñentes. Vai notar a esta ruta directorio, hai un cartafol app. Dentro do cartafol app, hai un par de votos cartafoles. De nota para comezar é este cartafol config. Entón, iso configura como a súa aplicación web é vai, digamos, acceder persoas ou cousas de caixa ou conectar á base de datos. E o que é realmente útil é que Laravel permite configurar diferentes ambientes de desenvolvemento. Entón, o que nós fixemos aquí é se imos no cartafol local, hai un ficheiro database.php. E vai notar aquí que nós configurar unha conexión MySQL que permite que os individuos para conectarse ao servidor MySQL que é directamente sobre o aparello CS50. E nós estamos conectando a unha base de datos que configurar chamado Blog50. Entón imos realmente ir adiante e executar a versión de traballo deste, só para ter unha idea do que o aplicación que estamos construíndo parece. Entón, eu teño unha copia do este Blog50 rematada. Entón, en realidade, Laravel foi construído en un servidor que pode realizar directamente a partir da liña de comandos. Polo tanto, este é semellante ao PSet antes, cando, en realidade, construír o seu propio servidor en C. Entón, eles teñen un construído en tan que pode executar as súas aplicacións Laravel directamente desde a liña de comandos. Entón, se nós facemos php artesán servir, este lanzará un servidor de desenvolvemento na porta 8000. Entón, se imos a host local 8.000, notarás que, hey. Temos o noso blog a funcionar. Así Laravel aquí é xerar a primeira páxina do noso blog. Aplicación moi sinxelo. Pero hai un par características moi bacana que ofrece debaixo do capó. Entón, da aplicación de blog simple. Se quixésemos crear un post, podemos premer nese botón. Podemos dicir: "Ei, persoal. Este é realmente un divertido seminario ", por exemplo. E escribir algo aquí. Texto aquí. Se premer en Enviar, vai entender que o noso novo blog pos foi engadido á primeira páxina do blog. Se volvemos aquí, vai entender que houbo algúns comentarios xa no blog. Entón, se nós rolar para abaixo, vai notar que Jonathan Tan di que estaba moi intrigado con este post. Entón, nós falaremos sobre como obxecto relacional permite facer esas relacións en unha forma moi transparente tamén. Con estilo. Calquera dúbida sobre a funcionalidade de que imos construír? Con estilo. Entón, imos comezar con certo crear as táboas de base de datos. Entón, recorda que en CS50 Finanzas, vostede montar unha táboa para os usuarios así como para o stocks na súa carteira. Entón, como mencionamos anteriormente, o que usamos en Laravel é algo coñecido como migracións. Entón, se nós volver ao código de distribución aquí, o primeiro mando que é útil que Laravel fornece-lle é esta orde migrar. Entón, podemos facer php migrar artesán: facer. Entón, iso nos permite crear unha migración. E entón nós imos querer para crear unha migración chamado create_posts_table, que vai estar onde estamos indo estar almacenando os nosos artigos. E vai notar aquí que é executado a través dun código que, en realidade, xera un arquivo con un selo de tempo con iso. Entón, se nós ir e ollar para Banco de Datos, imos entender baixo Migracións que é creado un arquivo en branco para nós que ten código cliché co nome que nós indicado, crear postos de mesa. E ten dúas funcións na mesma. Up é o que queremos para ser executado cando o migración aplícase a base de datos. E abaixo é o que nós imos facer cando queremos desfacer unha migración. Entón, aquí imos comezar coa escrita esta migración. Polo tanto, hai unha clase útil en Laravel chamado esquema. Entón, nós estamos indo a executar Schema :: create. E nós estamos indo a crear unha táboa chamada mensaxes. E aquí nós aplicamos isto usando unha función. E dentro aquí, nós imos realmente especificar o contido da nosa mesa. Nós imos crear un ID, que é auto-incremento. Ademais, imos para crear un campo que representa o título do noso blog. Tamén imos crear un campo para almacenar o texto do noso blog. E, finalmente, imos para almacenar algúns timestamps para cando o noso post foi creado e cando foi actualizado. E abaixo, é moi sinxelo. Todo o que queremos facer é caer a mesa que creamos. Óptimo. Algunha pregunta? Polo tanto, agora se somos adiante e- en realidade, servidor local, déixeme borrar o que tiñamos anteriormente. Ir Databases. Vou borrar o que tiñamos anteriormente. Large iso e crear un novo banco de datos Blog50. Entón agora o que o máxico parte, dado que nós Pode aplicar estas migracións directamente á base de datos a través da liña de comandos ferramenta. Entón, se nós facemos php artesán migrar, notarás que, hey. É creada a táboa de migración, que nós imos dar un ollo a un pouco, e aplícase esta primeira migración. Entón miramos para Blog50, notará que é creado dúas mesas para nós. A primeira é esta táboa migracións. Entón, se nós ver iso, vai entender que esta táboa é moi sinxelo. É só dicir que, hey. Nós aplicamos esa migración. Nós volver e ollar nos postos. Vai notar que a estrutura é o que lle pedira. Temos un ID propio incremento. Temos unha cadea para almacenar o título, e un campo de texto para almacenar o contido. Óptimo. Con estilo. Calquera dúbida sobre migracións traballo, como podemos aplicala las? Non? Con estilo. Entón, agora nós estamos indo a ir adiante e, en realidade, crear o modelo. Por iso, queremos crear un modelo de mensaxes que almacena unha abstracción de base de datos. Entón, en vez de facer consultas MySQL directamente, nós imos crear. Polo tanto, debemos crear un cartafol aquí chamados modelos. E aquí dentro, nós imos crear un ficheiro chamado post.php. Dentro deste arquivo PHP, imos crear un posto de clase que se estende elocuente. Elocuente é o nome da ORM motor que ofrece Laravel. E, aquí, poderiamos esperar que realmente precisa escribir un código. Estamos indo para escribir algún funcións auxiliares posteriores. Pero fóra da caixa, iso xa vai recoñecer o que está na base de datos e podemos acceder, digamos, o texto do noso post de blog ou o título, e crear cousas directamente con practicamente ningún código que sexa. Entón, iso é un dos compoñentes máxicos. E o vento xa que esta clase é máis de pleno dereito, imos incluír información sobre o que ao cal está relacionado, de xeito que os comentarios. Tamén crear unha función para que poidamos realmente obter directamente a URL dunha páxina post. Con estilo. Calquera dúbida sobre iso? Non. Con estilo. Entón, agora, xa que temos o noso modelo, Quere crear un controlador que é capaz de interactuar con estes modelos, e, subsecuentemente, a base de datos. Entón, se tomamos un ollo BlogController, vai notar que non hai moi aquí agora. Todo o que hai é unha función index que xera a páxina principal, pero sen nada Aínda hai a exhibir. Así, a primeira función que nós estamos indo a crear é aquel que nos permite para crear un blog. Entón imos declarar unha nova funcionalidade chamada newPost. E aquí dentro simplemente, imos para definir o deseño da páxina para ser unha versión render, se se lembra de CS50, deste modelo chamado blog.new, que imos crear un pouco. Notará aquí na liña seis que especificamos esa variable, esquema. E se derme un ollo no cartafol Views, hai un cartafol Layouts, que inclúe un ficheiro HTML moi básico. E de nota, notará que temos ese recipiente aquí que produce contido. Entón, dentro do noso modelo o que nós imos facer é crear o que será substituído directamente dentro deste esquema. Entón nós dixemos que queremos renderizar un modelo chamado blog.new. Pero dentro do Blog, hai aínda non este novo modelo. Entón imos crear un arquivo chamado new.blade.php. Isto di que Laravel o ficheiro PHP debe ser prestado co modelo de motor lámina. Polo tanto, esta é unha forma xusta arquivo simple. Vai ser a forma pola cal nós realmente engadir nun post de blog. Así, a maxia aquí desde o herdanza é que, hey. Queremos especificar que o sección, a sección de contido aquí, que é delineada porsection estop. Entón, o que hai entre aquí vai ser substituído no esquema mestre. E aquí o que queremos facer é moi simplemente crear un novo ficheiro HTML. Nós só engadir un título rápida. Engadir un post de blog. E dentro del, somos vai crear un formulario. Esta forma terá unha acción. E iso vai ser algo que substituír máis tarde, e veremos como enrutamento encaixa aquí. Pero nós só estamos indo a definir, polo de agora que esta vai para un URL co percorrido de createPost. E entón iso vai ter método post. Dentro aquí, nós imos ter dous campos. Div class = "grupo-forma". Utilizamos a biblioteca Bootstrap CSS graciosamente fornecido polo Twitter. Entón, nós imos crear dous destes. Polo tanto, esta entrada é primeiro será o título. Nome Entón input = "title". Class = "formcontrol". Type = "text". Eu estou indo para engadir un espazo reservado = "Title". E, a continuación, o segundo é vai ser unha área de texto. Name = "contido". Class = "formcontrol". E espazo reservado = "Escriba aquí". Alí imos nós. Finalmente, imos engadir un botón rápido envío. Type = "submit" class = "btn btn-fondo". Entón, eses son todos características de Bootstrap así que este pode ser instalado de forma que é presa para o usuario, en vez de HTML espido. Entón, definimos o controlador aquí. Xa definimos unha visión moi sinxelo. Pero o que falta é do tecido conxuntivo. Entón, neste momento, Laravel non ten idea de como imos realmente acceder a este controlador. Polo tanto, este é definido nun arquivo chamado routes.php. E, neste momento, temos unha ruta. Que é cando imos para o camiño de casa para o sitio, que vai procesar o controlador de índice. Entón, aquí o que necesitamos facer é aplicar unha nova ruta para nós para crear un post. Entón, usamos este método obter, que especifica que, cando un usuario intenta obter este página-- especificamente o post cortar novo página-- o que nós imos facer é usar o controlador chamado BlogController novo post. O que acabamos de crear. E entón nós imos Alias ​​como newPost. Nós imos crear outro función nun pouco. Pero o que está aquí baixo a clave ", como" é o que podemos substituír dentro nosos modelos da lámina. Entón, por agora, imos en realidade, tamén din ruta. Entón, nós tamén imos para crear un controlador para que poidamos crear esas mensaxes. Polo tanto, se un usuario mensaxes para o post páxina barra nova, o que nós imos facer é utiliza un controlador que imos crear en breve chamado BlogController en createPost. E nós imos facer a réplica con este como createPost. Con estilo. Algunha pregunta? Con estilo. Entón, imos realizar o que temos ata agora. Entón, se nós facemos php artesán servir, veremos moitos erros. Polo tanto, parece que temos un erro de sintaxe en rutas liña 27. Ah. Falta un punto e coma. Entón, se imos a 8000, vai ver nada aquí aínda. Polo tanto, esta é a páxina de inicio estándar. Pero se somos para deixar cortar novo, hey. Vai ser a forma que acabamos de crear. Neste momento, non temos aplicado a funcionalidade de cando se prema o botón Enviar. Entón, se eu premer no Enviar botón, el vai a realizar un erro. Pero imos ao código que agora, precisamente o que nos quere facer cando un usuario sostén esta forma. Entón, imos facelo. Voltar para o ficheiro de controladores. O que imos facer é aplicar esta nova función que nos permite crear un post. Declare nova función. CreatePost función pública. E esa función será un pouco máis sofisticado que o que que tiñamos antes. Pero vai ver aquí que non estamos vai realmente escribir calquera SQL. O ORM, o Eloquent ORM, permitirá -Nos a facelo nalgúns formas dun xeito máis elegante. Entón imos crear un novo post. E aquí estamos instanciar un novo obxecto a partir do modelo que acabamos creado, o modelo post. E o que nós imos facer é establecer o atributo título deste usando algo que comeza a partir do servidor. Polo tanto, este é semellante ao que que tiñamos antes en CS50 Finanzas onde queremos facer, usando o Super Global Post buscando título. Entón Laravel ofrece algunhas saneamento e outros enfeites usando esa función auxiliar. Entón, nós preferimos usar isto en vez desta forma bruta moi básico de PHP. E entón o que imos facer é definir o contido do mesmo para o contido de entrada. En realidade, estamos indo a embrulhar isto nunha función útil PHP que ofrece chamado nl2br, que Acontece novas liñas, NLS, en BRS, pausas, para que poidamos realmente ter diferentes puntos dentro del. E, finalmente, o que imos que facer é gardar este post. Entón, nós chamamos a función gardar para este modelo. Imos salvar o post. E, finalmente, o que nós imos facer é redireccionar ao usuario especificamente para ruta que imos crear en breve, alias, viewPost. E nós estamos indo a pasar nos argumentos id, sendo a id deste novo post. Óptimo. Entón, agora, se realmente ir e executar este. Nós imos engadir un novo post. Imos dicir que este é o seminario 50. E dicir, con certeza. ADSL. Tanto ten. Algún tipo de contido. E presenta-lo. E nós imos entender que, hey. rutas non definido. Pero se derme un ollo e phpMyAdmin buscar ou non a nosa función fixo nada. Olle para os artigos Blog50. Imos entender que, hey. En realidade, nós só crear este blog enviar coa data e hora, conforme especificado. Entón agora imos voltar e realmente crear estoutra función no noso controlador, especialmente o controlador viewPost. ViewPost función Entón público. Entón, aquí o que imos facer, en vez de ter parénteses baleiros, imos querer pasar o ID de o post que estamos creando. E a partir de aquí que nós imos facer é realmente consultar a base de datos para el. Entón, se nós non publicar, hai unha función chamada Atopa permítenos consultalo lo por ID. En concreto, en realidade, nós imos usar unha versión alternativa deste chamado Procure ou Fail, o que nos permite para saír fóra desta función, lanzar unha excepción se o ID pasamos en non existe. E entón nós imos facer algo semellante ao que fixemos anteriormente onde imos definir o contido desta páxina para ser a versión procesada deste novo modo de visualización que imos crear, blog.view. E nós imos pasar ele-- Así como no CS50 renda function-- un dicionario de variables. As claves desta matriz asociativa fan a variables dentro do modelo. Entón, nós estamos indo facer post post. Entón pasar indirectamente o cargo que temos consultado a partir da base de datos. . Agora, o que nós imos facer é crear esa visión para que poidamos realmente ver os artigos do blog que temos construído. Entón imos crear un arquivo chamado view.blade.php. Entón, dentro dese modelo, o que nós imos facer é montar unha páxina simple que permítenos mostrar o contido. Entón nós facemos parte, que é antes de contido. Pare. E o que imos o que facer dentro aquí é escribir algún HTML para exhibir esta páxina. Entón, nós estamos indo a envolve-lo con unha fantasía novo elemento HTML5 chamado artigo. E, aquí, nós imos ter unha cabeceira onde imos simplemente ter un h1, que inclúe o título do post. Entón, aquí, se miramos para este notación chaveta dobre, iso vai facer esencialmente PHP echo título do post. Polo tanto, é unha abreviación útil Laravel que nos ofrece. Entón, nós estamos indo a usar esta notación en vez diso. E aquí, nós imos tamén imprimir o contido do mesmo. E, aquí, nós imos facer contido do post. E, na parte inferior do que somos vai facer é crear un pé. E no rodapé, imos primeira exhibición cando este foi publicado. Polo tanto, este foi publicado en, creada no. E Laravel usa un moi bo biblioteca data chamado carbono. Así, podemos realmente facer algo chamado difforHumans, o que viu anteriormente. Cando postamos. que vai dicir: tipo, cinco segundos atrás. Polo tanto, este é un moi bo función de Laravel. E, finalmente, imos para pechar esta rodapé. Polo tanto, agora volver Páxina principal imos para ver nada aquí aínda porque non ter codificado a páxina principal. Pero se somos para publicar unha barra, imos ver unha excepción. Alguén sabe por que vemos unha excepción? O que estamos perdendo? Calquera ideas? Entón, o que nós facemos máis cedo para nós, en realidade, para definir como nós conseguimos controladores en particular? COLUMNA 1: A ruta? ERIC Ouyang: Yeah. Polo tanto, aínda temos que establecer o percorrido. Entón imos voltar aquí para routes.php. Notarás que nós realmente non teño definido como imos chegar a este controlador. Entón, agora imos establecer esa ruta. É moi sinxelo, semellante ao que fixemos anteriormente. Pero o que nós estamos indo a notar aquí é que nós imos ter un espazo reservado. Entón, se nós facemos route.get post barra ID. Entón ID agora é o que vai ser pasado para o controlador. Isto vai utilizar o controlador que acabamos creado, en BlogController viewPost. E nós imos de feito esta como viewPost. Óptimo. Entón agora imos crear esta ruta. Polo tanto, agora imos aquí e actualiza esta páxina, nós, de feito, teñen o noso novo blog. Entón é iso que creamos máis cedo. Mesma páxina simple, pero amosa o blog que acabamos de crear. Con estilo. E se nós realmente pasar por todo proceso de creación dun novo post, imos entender que todo redirecciona correctamente. Se eu digo: "Ola. Estou Jonathan Tan. " Diga: "Este é o meu blog." E presenta-lo, iso vai crear este novo post con ID 2, que incrementos do que tiñamos anteriormente e presenta-lo correctamente. Impresionante. Algunha pregunta? Si? COLUMNA 2: Será que Laravel handle sanitização e todo para ti? ERIC Ouyang: Si. Entón, cando vimos antes, cando fixemos entrada colon colon obter, que sanitates calquera SQL inxeccións e outros enfeites que pode querer executar se somos un usuario malintencionado do sitio. Entón Laravel manexa unha morea de que, por tras dos bastidores. Boa pregunta. Entón, imos dar un ollo á páxina principal. Entón, se nós primeiro volver ao controlador para a páxina principal, notarás que el non fai moito aquí. Vai notar que non estamos pasando a este controlador nada especialmente útil. É só este ficheiro de índice. Entón, imos pasar este algo útil. E, especialmente, estamos vai pasar nos postos. E Laravel permítenos facer pos todo, o que permitiranos obter todas as mensaxes. Agora, se volver index.php, vai ver, hey. Nada aquí aínda. Pero o que queremos facer aquí é, en realidade, iterado, facer un loop foreach sobre os lugares que nos permite imprimir as mensaxes. Así como postos foreach post, o que queremos facer é imprimir o contido do post. Pero unha cousa que vai notar é que nós realmente escribiu a maior parte dese código xa, en view.blade.php. Entón, o que nós imos facer é, en realidade, usar un recurso útil agradable de Lâmina e fatorar o código común. Entón imos aquí. Nós imos levar este contido aquí, eo que nós imos facer é crear un novo cartafol. Imos chamalo só Partials. E, aquí, nós imos para crear unha post.blade.php. Entón, aquí, nós consignado apunta o camiño para que queremos amosar esas mensaxes. E aquí o que imos facer no canto de realmente ter que HTML directamente, imos usar esta directiva chamado inclúen blog.partials.post. E o que nós imos facer aquí é pasar no post da páxina. Polo tanto, agora volver aquí, nós imos notar que a funcionalidade aínda é o mesmo. Pero agora temos este fatoramos código, este HTML. Así, podemos usalo en Index. Entón, aquí, iso é moi sinxelo. Todo o que facemos é incluír blog.partials.post e array. E nalgún lugar para antes, o que facemos post post. Polo tanto, agora se volver para o páxina principal, veremos que, hey. Temos unha lista de todos os artigos que tiñamos antes. Podemos querer engadir un pouco de "se" condicións e as condicións "senón" de xeito que se non temos algo no blog, queremos mostrar algo útil. Como, hey. Non hai contido aínda no blog. E se vostedes realmente ollar para o código de distribución no GitHub, verás un exemplo de como podemos facelo. Con estilo. Algunha pregunta? Si. COLUMNA 2: Eu creo que só unha cuestión fundamental. De volta á ruta. ERIC Ouyang: Yeah. Se derme un ollo rutas. COLUMNA 2: Onde é que a uses.blogcontroller a crear post, o que iso nos dirixir para? ERIC Ouyang: Yeah. Si. COLUMNA 2: Ou o que é isso-- ERIC Ouyang: Entón, bótalle un ollo, din por exemplo, esta ruta ben aquí. A primeira parte é o real URL que o usuario vai para. E esa matriz aquí, matriz asociativa, define como queremos ter a acto aplicación en resposta a el. Entón usa é o controlador, a función que nos quere chamar cando un usuario vai para este URL. Entón viewPost aquí era un función que definimos no interior de BlogController-- COLUMNA 2: Entendo. ERIC Ouyang: -Só que nós Pode realmente facer un punto de vista, realizar algúns cálculos, interactuar co banco de datos SQL. COLUMNA 2: Aceptar. ERIC Ouyang: E ​​despois o outro parte ", como" é un apelido que usamos. Entón, se nós entender cando creamos o formulario, notarás que URL :: routecreatePost. Entón, el substitúe na real URL para que non son difíciles codificación destes en para que poidamos cambia-lo unha vez máis, dicir se quería cambiar o nome. No canto de barra de post novo, queremos facer, como, p cortar novo só para limpar nosas URLs algo. Queremos mudalo nun lugar bastante que en todos os distintos ficheiros. Con estilo. Iso é bo. Polo tanto, agora temos un moi blog plataforma básica. Nós probablemente vai querer engadir un botón para que podemos realmente crear novos postos. Entón, se imos dar un ollo no Máster Esquema, temos unha sección chamada Header Dereito que acabamos de definir-se na parte superior. Así, podemos engadir botóns para a parte superior da cabeceira. Entón, se imos a index.blade.php, en realidade, facer é establecer o que pasa aquí dentro. Polo tanto, esta sección Cabeceira dereito, o que nós imos facer é engadir un botón para ir ao URL definida pola ruta novo post. Só para limpa-lo e torná- -la fermosa e todos Bootstrap, imos facer este botón estándar. Nós só facelo grande para divertirse. E dentro dela, poderiamos poñer algún texto. Pero o que Bootstrap proporciona é glyphicons. Así, podemos realmente engadir en que bo lapis que vimos anteriormente. Glyphicon. Glyphicon-lápis. Entón, iso vai permitir poñer nun icono no canto de texto. Agora, se non parar, este definirá nesta sección. E, hey. Temos un botón agradable que nos une directamente ao engadir unha páxina de blog. Polo tanto, temos un blog moi sinxelo. Podemos engadir cousas a el. Pero o que nos esperan de blogs está comentando. Entón é moi importante para nós ter, dicir que, se alguén visita unha páxina web e realmente gusta do post que poden se involucrar en discusión con outras persoas que visitan a páxina. Entón, nós estamos indo a ir e crear un nova táboa de base de datos e un novo modelo para que poidamos asociar comenta con mensaxes. Entón o primeiro paso, como antes, é que necesitamos para realizar unha migración. Así como antes, o que facemos php artesán migre: facer. E nós estamos indo a crear un chamado create_comments_table. Isto creará un ficheiro que ten a nosa nova migración. E nós imos, como antes, establecer unha nova táboa. Entón Schema :: crear un táboa chamada comentarios. Esta función aquí. E dentro deste cadro que nós imos facer é en primeiro lugar, como antes, asignar un ID. Incrementa ID. Estamos indo para permitir que os usuarios a asociar seu nome cun comentario particular. Nós imos ter un contido que vai xunto con iso, o contido do texto. E aquí o que nós estamos indo a facer é algo diferente. Nós imos crear un enteiro que se chama post_id que significará que o post un comentario especial vai con. Ademais, nós estamos indo realmente para definir unha restrición de clave estranxeira sobre o asunto. Entón, MySQL ha impoñer iso. Non estamos tentando asignar o número de comentario 5 para publicar 5.000 se non temos tivo 5.000 artigos sobre iso. Entón, o que facemos aquí, facemos post_id estranxeira vai ser asociado con o campo ID dos postos da táboa. E nós imos realmente facer algo outra cousa útil, é onDelete. Entón, se nós borrar algúns publicar a partir da base de datos, que queremos fervenza do exclúe a comentarios tamén. Porque non é moi útil para nós ter comentarios sobre os artigos que non existen. E, finalmente, como antes, estamos definirá selos de tempo sobre este asunto. E, como antes, nós imos teñen a migración inversa ser eliminando a táboa comentarios. Polo tanto, agora volvemos para aquí, nós imos para realizar esta migración, artesán migrar. E agora é aplicada esta migración que acabamos de crear. Entón, se nós unha mirada a phpMyAdmin, o que facemos, de feito, agora ter unha táboa de comentarios que ten o estrutura que acabamos especificado. Así como antes, estamos vai crear un novo modelo abstraerse a táboa de SQL que acabamos de crear. Entón, imos engadir un novo ficheiro. Imos chamalo de comment.php. E iso é realmente vai ser moi simple, con un lixeiro cambio do que tiñamos antes. Así, a clase Comentario estende elocuente. E o que imos facer aquí é definir unha función que é a relación con outros modelos. Entón, nós imos ter unha función de post aquí que volve esta relación. Entón, nós estamos especificando que isto pertence a publicar, dicindo que hai un posto que este comentario pertence. Esta ten que ser efectivamente P maiúsculo para o modelo. E agora só o outro aleta banda, temos que dicir que, hey. Anotacións ten comentarios. Entón, o que nós imos facer é definir comentario función pública. E aquí é devolto Isto ten moitas Comment. Entón agora Magic cando temos un post, podemos obter os comentarios de atributos e que vai enche-lo co información da base de datos. Entón imos realmente pasar e engadir un novo recurso para o noso arquivo de visión para que poidamos tanto exhibición e crear comentarios. Entón, imos establecer unha nova sección. Nós só separa-lo cunha regra horizontal. Sección id = "comentarios". O que nós imos facer aquí é, como antes, percorrer todos os comentarios. Entón, en realidade, como facemos isto é, como xa referín, bastante máxico. Facemos escribir comentarios. E entón podemos facelo para cada loop sobre cada un dos comentarios. E o que nós estamos indo a facer é clase div comentario, e nós estamos indo para realmente imprimir este comentario. Entón amosar que hey, comentar nome-- a persoa que publicou este comment-- di dot dot dot. Imos poñer isto nun bloque Cita, só para facela agradable. E logo comentar bloque de cita de contido. E foreach. Polo tanto, agora é que isto vai facer un loop a través de todas as opinións que está asociada con cada un dos postos e amosar cada un destes comentarios. Eu estou indo para engadir outra sección abaixo aquí, o que nos permite engadir un comentario. Clase Entón h3. Engade un título aquí. Engadir un comentario. E nós imos establecer unha nova forma. Así como antes, estamos fará acción de formulario. E aquí, a nova acción é que estamos indo para definir un novo controlador que permítenos responder para publicar solicitudes de creación de comentarios. Entón URL :: ruta createComment. Vou pasar o parámetro aquí. A ID do post que estamos creando comentar. E, a continuación, o método do presente forma será post. Agora imos engadir en a dous campos, grupo formulario. Esta será unha entrada co nome "nome" e class = "-control forma", type = "text", e co espazo reservado = "O seu nome". Tamén imos definir outro campo de formulario, que vai ser un texto área como tiñamos antes. Así como antes, chamalo de contido. Class = "-control forma." Espazo reservado = "Escriba aquí." E só así que nós Realmente pode envialo, presentar tipo e class = "btn btn-primario." Peche o formulario. Peche esa acción. Entón, agora, se actualiza esta páxina onde temos, digamos, un post especial. Temos que reiniciar o servidor. PHP artesán servir. Reinicie iso. Debemos establecer o percorrido. Pero, por agora, imos aproveitar esta a fóra, para que poidamos realmente amosar-lle o que a páxina parece, e, a continuación, imos realmente crear esa ruta. Entón, hey. Temos esta nova forma aquí para que poidamos crear comentarios. Entón imos realmente definir un función dentro do controlador para que poidamos engadir comentarios. Imos volver. E dentro blogcontroller.php, o que nós imos facer é crear unha nova función chamado crear comentario. CreateComment función pública. Isto vai ter un único parámetro, o ID dos postos que estamos comentando. E, como antes, estamos vai pegar o primeiro post. Entón publicar, id findOrfail. Despois, imos para crear un novo comentario. Entón comentar = new comment. Comentario name = Input :: get nome. Contido Comment = a mesma liña nova en intervalos de entrada :: obter contido. E, finalmente, teremos que asociar este comentario co post. Entón, nós estamos indo a usar esta función, comentarios, que nos permite aforrar esta relación. Entón agora este comentario terá automaticamente o ID post. Tamén pode configurar-lo man, pero esta é máis fácil de ler, tanto como a función vai. E despois nós realizamos tanto, o que queremos facer é redireccionar ao usuario para o ruta especificada por viewPost coa matriz co parámetro da ID post. E agora, de xeito que este, de feito, funcións, necesitamos definir esta ruta. Route :: post. E agora nós imos chamar ese pos cortar ID barra comentario. Matriz usa a nova función que acabamos de crear. BlogController. CreateComment como createComment. Óptimo. Entón, agora espero que se actualiza esta páxina e engadir nun comentario, digamos, David Malan. "Esperamos que isto funciona". Enviar. Nós, de feito, ter un comentar este post. Con estilo. Polo tanto, agora temos un moi post funcional. Nós só estamos indo a engadir un par de axustes de xeito que temos un pouco máis útil información sobre estas mensaxes. Entón, se nós volver ao primeira páxina, non temos sentido de cantos comentarios son en cada unha destas mensaxes. Entón, o que nós estamos indo realmente que facer é, dentro do noso modelo, definir unha función auxiliar que permite -Nos para especificar o número de comentarios que ir con un post especial. Entón, nós estamos indo a crear unha función auxiliar. Función Pública. GetNumCommentsStr. Así, unha secuencia de caracteres que especifica o número de comentarios que ir xunto con el. E o que nós imos facer é dicir que nun = esta comentarios contar. Entón, nós estamos indo a contar o número de comentarios. E se ese número é igual a 1, somos só vai voltar 1 comentario. E, a continuación, se non, queremos volver a concatenación de nun e comentarios, así que nós comezamos a pluralização correcta. Só ten que facer iso unha única cita. Un comentario. E agora podemos acceder a esta función directamente dentro do noso punto de vista. Entón, se nós volver ao mensaxes parciais que creamos, agora queremos realmente amosar o número de comentarios. Entón, o que podemos facer é post, utilizar esta función que acabamos de crear a amosar o número de comentarios. Entón, se nós agora actualizar, el fai, de feito, display os comentarios número que ir xunto con el. Se quixésemos ser extravagante, se realmente ollar para o código de distribución, podemos realmente enlace isto para os comentarios. Se ben se lembran, nós definido dentro do ver que iso non ten comentarios sección de identificación. Entón, se nós realmente quería obrigar directamente á sección de comentarios, o que fariamos aquí é a href URL do viewPost ruta. Pase en ID matriz de post ID. E entón nós queremos ir especialmente a sección de comentarios. Aquí imos pechar a A etiqueta. Entón, agora, se actualiza esta páxina, prema sobre este asunto. Imos ir directamente a sección de comentarios. Se tivésemos un post máis longo, pode realmente ver este salto baixo. Pero vai entender que é non na parte superior da páxina. Con estilo. Óptimo. Entón iso é un moi sinxelo exemplo de algo sinxelo que pode facer con Laravel. Pero pode notar aquí que fixemos unha morea de cousas con bastante pequena cantidade de código. Laravel nos permite facer a Consultas SQL nos bastidores. Fai o saneamento para nós nos bastidores. Nos permite facer estas relacións moi facilmente, sen nós, precisando para facer calquera SQL xuntar declaracións á combinar observacións co que os postes. Permítenos facelo herdanza de modelos para que poidamos establecer estes nidificación arquivos por iso non nos estamos repetindo, así como cando tivemos que exhibición dos artigos do blog que non temos a copia e pega o código. E a partir de aquí pode construír aplicacións cada vez máis complicados. Podes imaxinar se quería aplicar log-in, poderiamos dicir, traer un terceiro estrutura que nos permite facelo. Hai unha morea deles que son moi, moi grande que pode facer, como, recuperación de contrasinal. E vai enviarlle unha axustar o contrasinal do correo electrónico. Podemos aplicar permiso para que eu poida crear un post, pero alguén non pode editalo. Podemos aplicar funcionalidade para borrar posts. Pero pode ver aquí que temos moito tanto todos os compoñentes rudimentarias para construír algúns realmente, realmente, aplicacións dinámicas e emocionantes web. Entón, con iso, eu creo que estamos ben. Tendes algunha dúbida? Si? COLUMNA 3: Como obter contido estático? ERIC Ouyang: O contido estático. Entón viu antes que cando tivemos isto aquí, este contido esquema, vista make, tivemos este sen esta matriz despois. Blog.index tivemos este como só un ficheiro estático. Entón, se nós non pasar nada xunto a el, iso só vai facer o HTML directamente. Pero se nós pasamos neste asociativa variedade de mensaxes, que é dinámicamente tirado dende a base de datos, nos pode facer a páxina dinámica. Con estilo. Algunha pregunta? COLUMNA 3: Como compararía Laravel para quizais algunhas outras opcións? ERIC Ouyang: Claro. Si. Entón Laravel é-- iso é un gran question-- unha das moitas opcións de frameworks web. Entón Ruby on Rails é un que é popular. Creo Twitter adoitaba ser aplicado con Ruby on Rails. Eu creo que desde conmutada. Hai outro chamado FuelPHP. Entón Ruby on Rails usa a linguaxe Ruby e aplica unha morea de cousas MVC que vemos aquí. FuelPHP é outro framework PHP. Django é un dos meus favoritos. É un framework web para Python. Así, pode escribir a súa aplicación web en Python. Polo tanto, hai unha tonelada de estas opcións. Laravel, eu creo que, dun modo grande é o meu dereito favorito agora para PHP só porque dos compoñentes que falamos anteriormente. É Composer habilitado. Inclúe un moi, moi sistema ORM expresivo. Tamén ten unha modelaxe realmente incrible lingua que algúns dos outros só non proporcionan. E migracións. As migracións son incribles. Legal? Impresionante. Ben, moitas grazas por asistir a este seminario, e boa sorte en proxectos finais.