[REPRODUCCIÓN DE MÚSICA] ERIC Ouyang: Hey, todo el mundo. Bienvenido. Se trata del edificio dinámico Aplicaciones Web con Laravel. Mi nombre es Eric Ouyang. Soy un estudiante de segundo año estudiando ciencias sociales con una secundaria en ciencias de la computación, y vivo en Adams Casa aquí en Harvard. Así Laravel, en su forma más básica, es un marco de aplicación web MVC. Así que te guste lo que ustedes tienen estado haciendo con CS50 Finanzas, Laravel es un marco que permite que le permite construir aplicaciones web dinámicas. Así que usted puede pensar en él en algunos sentidos como una extensión del tipo de cosas que has estado haciendo en CS50 Finanzas, sino un sistema que es mucho más robusto, mucho más elegante, en algunos sentidos, y proporciona una gran cantidad de funcionalidad para usted para construir bastante complejo aplicaciones web. Así que vamos a ir a través de algunos de las principales características, y luego vamos a bucear en un ejemplo de construcción de un blog aplicación con Laravel. Así que una de las primeras cosas que lo diferencia de tipo MVC de trabajo que usted ha estado haciendo con CS50 es que incluye un motor de ORM. Así ORM significa objeto mapeo relacional. Así que esto le permite construir una capa de abstracción entre la base de datos y sus controladores. Así que a diferencia de CS50 Finanzas donde directamente realizar consultas, la capa ORM le permite abstracta que de distancia y crear modelos que son más poderosos que puede directamente con consultas SQL. Otra cosa que es realmente es útil plantillas heredables. Así que usted notará en CS50 Finanzas, terminas reescribir un montón de cosas, donde coloca usted podría potencialmente reutilizar las cosas, no eres capaz de hacerlo. Así que aquí en Laravel, puede utilizar lo que hay conocido como el motor de plantillas cuchilla para crear un diseño maestro. Y a partir de ahí, se puede heredar de modo que los sub-plantillas puede en realidad incluir elementos dentro de que mayor plantilla base. Migración. Así que esto es una serie de características bastante estándar en la mayoría de los entornos de aplicaciones web modernas. Así que esto le permite representar cambios en el esquema de base de datos en código. Así que sin ir a decir, phpMyAdmin, en realidad se puede crear estas migraciones donde Representas a la base de datos esquema de cambios en el código directamente. Y esto le permite a-- especialmente si tiene varias personas que trabajan en el mismo application-- web realizar un seguimiento de estos cambios, decir en GitHub, o algún otro repositorio. Así que esto es realmente útil y mitiga la necesidad a, por ejemplo, pasar alrededor de un montón de SQL vertederos. Y, por último, Composer es algo muy, muy útil que le permite utilizar otro código de la gente para hacer cosas impresionantes. Así Laravel del estructurada como varios paquetes compositor. Así que dices si quería llevar en un paquete de autenticación o si usted quiere traer un poco de tipo de script generador o un administrador interfaz, puede conectar y jugar esos componentes con Composer. Así que vamos a empezar. Cualquier pregunta de usted chicos antes de empezar? No hay preguntas? Fresco. Así que el primer paso es instalar Compositor. Así Composer le permite gestionar estas dependencias, si es el marco Laravel o alguna otra extensión terceros. El primer comando permite descargar Compositor, y el segundo comando que permite a moverlo a la carpeta bin locales por lo que puede ejecutar Compositor directamente a través del terminal. Después de eso, seguir adelante y crear un nuevo proyecto Laravel. Estamos realmente va a utilizar un código de ejemplo que he juntado para crear este blog. Pero si vas a empezar desde cero, sería utilizar este comando hasta aquí, compositor crear proyectos, Laravel slash Laravel, y luego el nombre de su proyecto. Y eso va a incluir todo el código de distribución para iniciar un nuevo proyecto Laravel. Así que para los proyectos finales CS50, podrás Probablemente quiera utilizar ese comando. Pero vamos a empezar con esto. Así que una vez que has hecho que, vas a conseguir un número bastante extensa de archivos en blog50. Así que vamos a ir a través de algunos de estos componentes. Se dará cuenta en esta ruta directorio, hay una carpeta de aplicación. Dentro de la carpeta de aplicaciones, hay un par de carpetas útiles. Es de destacar que empezar con es esta carpeta config. Así que este establece cómo su aplicación web es ir a, por ejemplo, autentificar las personas o cosas en efectivo o se conectan a la base de datos. Y lo que es realmente útil es que Laravel le permite configurar diferentes entornos de desarrollo. Así que lo que hemos hecho aquí es que si vamos debajo de la carpeta local, hay un archivo database.php. Y te darás cuenta de que estamos aquí configurar una conexión MySQL que permite que las personas se conecten al servidor MySQL que es directamente en el aparato CS50. Y estamos conectando a una base de datos que configuro llamé Blog50. Así que vamos a seguir adelante y realmente ejecutar la versión de trabajo de este, sólo para tener una idea de lo que el aplicación que estamos construyendo parece. Así que tengo una copia de este Blog50 completado. Así que en realidad Laravel ha construido en un servidor que se puede ejecutar directamente desde la línea de comandos. Así que este es similar a la PSet antes cuando realmente construir su propio servidor en C. Así que han construido uno en la que puede ejecutar sus aplicaciones Laravel directamente desde la línea de comandos. Así que si lo hacemos php artesanal servir, esta pondrá en marcha un servidor de desarrollo en el puerto 8000. Así que si vamos al host local 8000, te darás cuenta de que, hey. Tenemos nuestro blog en marcha y funcionando. Así que aquí está generando Laravel la primera página de nuestro blog. Aplicación muy simple. Pero hay un par características realmente ingeniosas que proporciona debajo de la campana. Así que de la aplicación de blog sencillo. Si quisiéramos crear un puesto, podemos hacer clic en ese botón. Podemos decir: "Hey, todo el mundo. Este es un muy divertido seminario, "por ejemplo. Y escribir algo aquí. Texto aquí. Si nos clic en Enviar, usted cuenta de que nuestro nuevo blog puesto se ha añadido a la portada del blog. Si volvemos aquí, te darás cuenta de que ha habido algunos comentarios ya en el blog. Así que si nos desplazamos hacia abajo, podrás observe que Jonathan Tan dice que estaba muy intrigado por este post. Así que vamos a entrar en cómo objeto mapeo relacional permite que hagas estas relaciones en una manera bastante transparente también. Fresco. Una pregunta sobre la funcionalidad de lo que vamos a construir? Fresco. Así que empecemos con realidad la creación de las tablas de la base. Así que recordar que en CS50 Finanzas, que armar una mesa para los usuarios así como para la acciones en su cartera. Así como hemos mencionado anteriormente, lo que usamos en Laravel es algo que se conoce como las migraciones. Así que si nos remontamos a la código de distribución aquí, el primer comando que es útil que Laravel le proporciona Es este comando migrate. Así que podemos hacer migrar artesanal php: hacer. Así que esto nos permite crear una migración. Y luego vamos a querer para crear una migración llamado create_posts_table, que va estar donde vamos a ser almacenar nuestros posts. Y se dará cuenta aquí que se ejecute a través de algún código que realmente genera un archivo con una marca de tiempo en él. Así que si vamos y miramos a base de datos, notamos bajo Migraciones que ha creado un archivo en blanco para nosotros, que tiene código repetitivo con el nombre que hemos especificado, crear puestos de la tabla. Y tiene dos funciones en el mismo. Up es lo que queremos ejecutar cuando el la migración se aplica a la base de datos. Y abajo es lo que vamos a hacer cuando queremos revertir una migración. Así que aquí vamos a empezar a cabo con la escritura de esta migración. Así que hay una clase útil en Laravel llamado esquema. Así que vamos a correr esquema :: crear. Y vamos a crear una tabla llamada puestos. Y aquí aplicamos esta utilizando una función. Y dentro de aquí, vamos a realidad especificar el contenido de nuestra mesa. Vamos a crear un documento de identidad, que es de incremento automático. Además, vamos para crear un campo que representa el título de nuestro blog. También vamos a crear un campo para almacenar el texto de nuestra entrada en el blog. Y, por último, vamos para guardar algunas marcas de tiempo para la que se creó nuestro post y cuando se ha actualizado. Y para abajo, es bastante simple. Todo lo que queremos hacer es caída la tabla que hemos creado. Grande. ¿Alguna pregunta? Así que ahora si vamos por delante y- realidad, anfitrión local, déjame borrar lo que teníamos antes. Ir a las bases de datos. Voy a borrar lo que teníamos antes. Deja esto y crear una nueva base de datos Blog50. Así que ahora lo que el mágico parte es aquí que puede aplicar directamente estas migraciones a la base de datos mediante la línea de comandos herramienta. Así que si lo hacemos migran php artesano, te darás cuenta de que, hey. Se crea la tabla de migración, que vamos a echar un vistazo a un poco, y se aplica esta primera migración. Así que miramos Blog50, te darás cuenta que ha creado dos mesas para nosotros. En primer lugar es esta tabla migraciones. Así que si navegamos esto, te darás cuenta de que esta tabla es bastante sencillo. Simplemente dice que, hey. Hemos aplicado esta migración. Vamos atrás y mirar en los puestos. Se dará cuenta de que la estructura es exactamente lo que habíamos pedido ella. Contamos con un ID de incremento automático. Tenemos una cadena para almacenar el título, y un campo de texto para almacenar el contenido. Grande. Fresco. ¿Una pregunta sobre las migraciones trabajo, ¿cómo podemos aplicarlos? ¿No? Fresco. Así que ahora vamos a seguir adelante y en realidad crear el modelo. Así que queremos crear un modelo de mensajes que almacena una abstracción de la base de datos. Así que en lugar de hacer consultas MySQL directamente, vamos a crear. Así que tenemos que crear un carpeta en aquí llamados modelos. Y aquí dentro, vamos a crear un archivo llamado post.php. Dentro de este archivo PHP, vamos a crear un poste de la clase que se extiende elocuente. Elocuente es el nombre de la ORM motor que Laravel ofrece. Y aquí, podríamos esperar que que realmente necesita para escribir algo de código. Vamos a escribir algunos funciones auxiliares posteriores. Pero fuera de la caja, esto ya lo hará Reconocer lo que está en la base de datos y podemos acceder, por ejemplo, el texto de nuestra entrada en el blog o en el título, y crear cosas directamente con casi ningún código en absoluto. Así que ese es uno de los componentes mágicos. Y el viento una vez que esta clase está más en toda regla, vamos a incluir información sobre lo que que está relacionado con, por lo que los comentarios. También crear una función para que podamos realmente obtener directamente la URL de una página blog. Fresco. ¿Una pregunta sobre eso? No. Fresco. Así que ahora, una vez que tenemos nuestro modelo, que desee crear un controlador que es capaz de interactuar con estos modelos, y, posteriormente, la base de datos. Así que si echamos un vistazo a BlogController, podrás observe que no hay mucho aquí en este momento. Todo lo que hay es una función de índice que genera la página principal, pero sin nada allí para mostrar todavía. Así que la primera función que vamos a crear es aquella que nos permite para crear una entrada en el blog. Así que vamos a declarar una nueva función llamada newPost. Y aquí dentro, simplemente, vamos para configurar el tamaño de esta página ser un render versión, si usted recuerda de CS50, de esta plantilla llamada blog.new, que vamos a crear en un poco. Se dará cuenta de que aquí en la línea seis que especificamos esta variable, el diseño. Y si echamos un vistazo en la carpeta Vistas, hay una carpeta Layouts, que incluye un archivo HTML muy básico. Y, por nota, te darás cuenta que tenemos este contenedor aquí que produce contenido. Así que dentro de nuestra plantilla lo que vamos a hacer es crear lo que va a ser sustituido directamente dentro de este diseño. Entonces dijimos que queremos hacer una plantilla llamada blog.new. Pero dentro de Blog, hay aún no esta nueva plantilla. Así que vamos a crear un archivo llamado new.blade.php. Esto le dice que Laravel este archivo PHP debe ser prestados con la motor de la plantilla de la hoja. Así que esto es bastante archivo sencillo. Va a ser la forma por la cual en realidad nos sumamos en un blog. Así que la magia aquí desde el la herencia es que, hey. Queremos precisar que la sección, la sección de contenido aquí, que queda delimitado porsection ystop. Así que lo que está en entre aquí va a ser sustituido en el diseño maestro. Y aquí lo que queremos hacer es muy simple crear un nuevo archivo HTML. Vamos a agregar un título rápido. Agregar una entrada de blog. Y dentro de ella, estamos va a crear un formulario. Esta forma va a tener una acción. Y esto va a ser algo que sustituimos en adelante, y vamos a ver cómo enrutamiento encaja en aquí. Pero sólo vamos a definir por el momento que este va a una URL con la ruta desde createPost. Y entonces esto va tener método POST. Dentro de aquí, vamos tener dos campos. Div class = "forma-grupo". Estamos utilizando la biblioteca Bootstrap CSS gentilmente proporcionada por Twitter. Así que vamos a crear dos de ellos. Así que esta primera entrada es va a ser el título. Así que el nombre de entrada = "title". Class = "FormControl". Type = "text". Voy a añadir un marcador de posición = "Title". Y entonces el segundo es va a ser un área de texto. Name = "contenido". Class = "FormControl". Y marcador de posición = "Escriba aquí". Hay que ir. Por último, vamos a añadir un botón de acceso rápido enviar. Type = "submit" class = "btn btn-primaria". Así que estos son todos características de Bootstrap lo que este se puede colocar en una manera que es presa para el usuario, en lugar de HTML desnudo. Así que hemos definido el controlador aquí. Hemos definido una visión muy simple. Pero lo que falta es el tejido conectivo. Así que en este punto, Laravel tiene ni idea de cómo vamos a realidad acceder a este controlador. Así que este se define en una archivo llamado routes.php. Y ahora mismo, tenemos una ruta. Que es cuando vamos a la camino a casa de este sitio web, que va a hacer el controlador de índice. Así que aquí lo que tenemos que hacer es poner en práctica una nueva ruta para nosotros para crear un poste. Así que usamos este método conseguir, que especifica que cuando un usuario intenta conseguir este page-- específicamente el cargo slash nueva page-- lo que vamos a hacer se utilice el controlador llamado BlogController nuevo puesto. La que acabamos de crear. Y luego vamos poner un alias como newPost. Vamos a crear otro función en un poco. Pero lo que hay aquí debajo la clave "como" es lo que podemos sustituir dentro nuestras plantillas de hoja. Así que por ahora, vamos a en realidad también decir ruta. Así también vamos para crear un controlador de manera que podemos crear estos puestos. Así que si un usuario publica para el cargo página SLASH nuevo, lo que vamos a hacer es utiliza un controlador que vamos a crear en breve llamado BlogController en createPost. Y vamos a alias esto con createPost. Fresco. ¿Alguna pregunta? Fresco. Así que vamos a ejecutar lo que tenemos hasta ahora. Así que si lo hacemos php artesanal servir, vamos a ver un montón de errores. Así que parece que tenemos una error de sintaxis en las rutas de la línea 27. Ah. Falta un punto y coma. Así que si nos vamos a 8000, verás nada aquí todavía. Así que esta es la página de inicio predeterminada. Pero si vamos a publicar recortar nuevo, oye. Va a ser la forma que acabamos de crear. En este momento, no tenemos implementado la funcionalidad de cuando presionamos el botón Enviar. Así que si hacemos clic en el Presentar botón, se va a ejecutar un error. Pero vamos a código que en este momento, precisamente, lo que querer hacer cuando un usuario somete este formulario. Así que vamos a hacer eso. Volver al archivo de controladores. Lo que vamos a hacer es implementar esta nueva función que nos permite crear un post. Declarar nueva función. CreatePost función pública. Y esta función va a ser un poco más sofisticado que lo que teníamos antes. Pero verás aquí que no estamos va a escribir en realidad cualquier SQL. El ORM, el Elocuente ORM, va a permitir que hagamos esto de alguna formas una forma más elegante. Así que vamos a crear un nuevo puesto. Y aquí estamos instanciar un nuevo objeto a partir del modelo que acabamos de creado, el modelo posterior. Y lo que vamos a hacer es establecer la atributo título de este uso de algo que obtenemos desde el servidor. Así que esto es similar a lo que teníamos antes en CS50 Finanzas donde íbamos a hacer, utilizando el Súper Global Post buscando título. Así Laravel ofrece algunos servicios de saneamiento y otras cosas el uso de esta función auxiliar. Así que preferimos utilizar este lugar de esta forma cruda muy básico de PHP. Y entonces, ¿qué vamos a hacer es establecer el contenido de la misma a la Entrada obtener contenido. Estamos realmente va a envolver esto en una función útil PHP que proporciona llama nl2br, que Resulta nuevas líneas, NLS, en sa, roturas, para que podamos tener en realidad diferentes apartados dentro de ella. Y finalmente lo que vamos que hacer es guardar este post. Así que llamamos a la función ahorrar en este modelo. Vamos a guardar la publicación. Y finalmente lo que vamos a hacer se redirige al usuario específicamente a la ruta que vamos a crear en breve, alias viewPost. Y vamos a pasar en los argumentos id, siendo el id de este nuevo puesto. Grande. Así que ahora si realmente vamos y corremos esto. Vamos a añadir un nuevo puesto. Digamos que este es el seminario 50. Y decir, seguro. ASDL. Lo Que Sea. Algún tipo de contenido. Y enviarlo. Y nos dimos cuenta de que, oye. rutas no definidas. Pero si echamos un vistazo a phpMyAdmin y buscar si nuestra función hizo nada. Mira mensajes Blog50. Nos daremos cuenta de que, hey. De hecho, sólo creó ese blog Publicación de las marcas de tiempo según lo especificado. Así que ahora vamos a volver y en realidad crean esta otra función en nuestro controlador, específicamente el controlador viewPost. ViewPost función tan público. Así que aquí lo que haremos, en lugar de tener paréntesis vacíos, vamos a querer pasar en el ID de el puesto que estamos creando. Y a partir de aquí lo que vamos a hacer es en realidad consultar la base de datos para ello. Así que si nosotros publicamos, hay una función llamada Encuentra que nos permite consultarlo por ID. En concreto, en realidad, vamos a utilizar una versión alternativa de este llamado Encuentra o Fail, que nos permite para dejar de salir de esta función, lanzar una excepción si el ID pasamos en que no existe. Y luego vamos a hacer algo similar a lo que hicimos anteriormente donde montamos el contenido de esta página para estar la versión renderizada de esta nueva visión que vamos a crear, blog.view. Y vamos a pasar a la it-- Al igual que en el CS50 hacer function-- un diccionario de variables. Las claves de este array asociativo convertido en variables dentro de la plantilla. Así que vamos a hacer que poste. Así que pasar indirectamente el puesto que hemos preguntó desde la base de datos. . Ahora lo que vamos a hacer es crear este punto de vista por lo que podemos ver en realidad las entradas del blog que hemos construido. Así que vamos a crear un archivo llamado view.blade.php. Así que dentro de esta plantilla, lo que vamos a hacer está creado una página simple que nos permite mostrar el contenido. Así que hacemos sección, eso es antes de contenido. Deténgase. Y lo que vamos que hacer dentro de aquí es escribir algo de HTML para mostrar esta página. Así que vamos a envolverlo con una fantasía nuevo elemento HTML5 llamado artículo. Y aquí, vamos tener una cabecera donde vamos a simplemente tener un h1, que incluye el título de la entrada. Así que aquí, si nos fijamos en este doble notación corchete, esto hará esencialmente Php echo título de la entrada. Así que es una abreviatura útil que Laravel nos proporciona. Así que vamos a utilizar esta notación en su lugar. Y aquí, vamos a también imprimir el contenido de la misma. Y aquí, vamos que ver el contenido del post. Y abajo en el fondo de lo que somos vamos a hacer es crear un pie de página. Y en el pie de página, vamos a primera pantalla cuando esta publicación. Así que esta fue publicada en, creado el. Y Laravel utiliza una muy agradable fecha biblioteca llamada Carbon. Así que realmente podemos hacer algo llamado difforHumans que has visto antes. Cuando publicamos. que va a decir, como, hace cinco segundos. Así que este es un muy buen funcionalidad de Laravel. Y, por último, vamos para cerrar este pie de página. Así que ahora, si nos remontamos a Home Page vamos para ver nada aquí todavía porque no hemos codificado la página de inicio. Pero si vamos a publicar una barra, vamos a ver una excepción. ¿Alguien sabe por qué vemos una excepción? ¿Qué nos falta? ¿Alguna idea? Así que lo que hicimos nosotros anteriormente para nosotros en realidad para definir cómo se llega a controladores particulares? ALTAVOZ 1: La ruta? ERIC Ouyang: Sí. Así que todavía tenemos que definir la ruta. Así que volvemos aquí para routes.php. Se dará cuenta de que en realidad no han definido cómo vamos a conseguir a este controlador. Así que ahora vamos a definir esta ruta. Es bastante sencillo, similar a lo que hicimos antes. Pero lo que vamos a notar aquí es que vamos a tener un marcador de posición. Así que si lo hacemos route.get puesto slash ID. Así ID ahora es lo que va a ser aprobado en el controlador. Esto va a utilizar el controlador que acabamos de creado, BlogController en viewPost. Y vamos a alias esto como viewPost. Grande. Así que ahora vamos a crear esta ruta. Así que ahora si vamos aquí y volver a cargar esta página, que, de hecho, tenemos nuestro nuevo blog. Así que esto es lo que hemos creado antes. Muy simple página, pero se muestra el entrada de blog que acabamos de crear. Fresco. Y si en realidad nos pasamos por el todo proceso de creación de una nueva entrada en el blog, nos daremos cuenta de que todo redirige correctamente. Si digo: "Hola. Soy Jonathan Tan ". Diga: "Este es mi blog." Y presentarlo, esto creará esta nueva entrada en el blog con ID 2, que los incrementos de lo que teníamos previamente y muestra correctamente. Impresionante. ¿Alguna pregunta? ¿Sí? ALTAVOZ 2: Cómo maneja Laravel desinfección y todo para usted? ERIC Ouyang: Sí. Así que cuando vimos antes, cuando hicimos entrada de colon de colon llegar, que sanitates cualquier SQL inyecciones y otras cosas que lo que se quiere llevar a cabo si estamos un usuario malicioso de la página web. Así Laravel maneja una gran cantidad de que detrás de las escenas. Buena pregunta. Así que echemos un vistazo a la página de inicio. Así que si primero volvemos a la controlador de la página principal, te darás cuenta de que no hace mucho aquí. Se dará cuenta de que no somos pasando a este controlador algo particularmente útil. Es sólo este archivo índice. Así que vamos a pasar en esto algo útil. Y específicamente, estamos va a pasar en los puestos. Y Laravel nos permite hacer puesto absoluto, lo que nos permitirá obtener todos los mensajes. Ahora bien, si nos remontamos a index.php, verás, hey. Aquí no hay nada todavía. Pero lo que queremos hacer aquí es en realidad recorrer, hacer un bucle foreach en los puestos que nos permite imprimir los mensajes. Mensajes Así como foreach puesto, lo que queremos hacer se imprime el contenido de la entrada en el blog. Pero una cosa que notarás es que que en realidad escribió la mayor parte de ese código Ya, en view.blade.php. Así que lo que vamos a hacer en realidad es utilizar una buena característica útil de Blade y factorizar el código común. Así que vamos. Vamos a tomar este contenido aquí, y lo que vamos a hacer es crear una nueva carpeta. Vamos a llamarlo Parciales. Y aquí, vamos para crear un post.blade.php. Así que aquí, tomamos en cuenta la forma en la que queremos mostrar estos mensajes. Y aquí lo que haremos en lugar de realmente tener que HTML directamente, vamos a utilizar esta directiva llamada incluyen blog.partials.post. ¿Y qué vamos a hacer aquí es pasar en el post de la página. Así que ahora si regresamos aquí, vamos a observe que la funcionalidad es todavía lo mismo. Pero ahora tenemos este un factor fuera de código, este código HTML. Así que podemos usarlo en el Índice. Así que aquí, esto es muy sencillo. Todo lo que hacemos es incluir blog.partials.post y matriz. Y en algún lugar a antes, hacemos salen post. Así que ahora, si nos remontamos a la página de inicio, vamos a ver que, hey. Tenemos una lista de todos los entradas de blog que teníamos antes. Podríamos querer agregar un poco de "si" condiciones y condiciones "else" de modo que si no tenemos nada en el blog, queremos mostrar algo útil. Al igual que, hey. No hay contenido publicado en el blog. Y si ustedes realmente Mira el código de distribución en GitHub, verás un ejemplo de cómo lo hacemos. Fresco. ¿Alguna pregunta? Sí. ALTAVOZ 2: Supongo que simplemente una pregunta fundamental. De vuelta en la ruta. ERIC Ouyang: Sí. Si echamos un vistazo a las rutas. ALTAVOZ 2: ¿De dónde viene el uses.blogcontroller a crear correos, ¿qué nos dirigen a? ERIC Ouyang: Sí. Sí. ALTAVOZ 2: O lo que es que-- ERIC Ouyang: Entonces, echar un vistazo, por ejemplo por ejemplo, esta ruta aquí. La primera parte es la real URL que el usuario va a ir. Y esta serie aquí, matriz asociativa, define cómo queremos tener la aplicación acto en respuesta a la misma. Así que utiliza es el controlador, la función que nos querer llamar cuando un usuario va a esta URL. Así viewPost aquí era un función que hemos definido en el interior de BlogController-- ALTAVOZ 2: Ya veo. ERIC Ouyang: --así que en realidad puede hacer que un punto de vista, realizar algunos cálculos, interactuar con la base de datos SQL. ALTAVOZ 2: OK. ERIC Ouyang: Y luego el otro parte ", pues" es un alias que usamos. Así que si nos damos cuenta cuando hemos creado el formulario, te darás cuenta de que el URL :: routecreatePost. Por lo tanto, sustituye en el real URL para que no somos duro codificación de estos en lo que podemos cambiarlo una vez, decimos si queríamos cambiar de nombre. En lugar de barra posterior nuevo, queremos hacer como, p reducir radicalmente nuevo sólo para limpiar nuestras URLs un poco. Nos gustaría cambiarlo en un solo lugar en vez que a través de todos los diferentes archivos. Fresco. Eso es bueno. Así que ahora tenemos una muy plataforma de blogs básica. Probablemente nos queremos añadir en un botón para que en realidad podemos crear nuevos puestos. Así que si echamos un vistazo en el Layout Master, tenemos una sección llamada Cabecera Derecho que sólo hemos definido en la parte superior. Así que podemos añadir botones a la parte superior de la cabecera. Así que si vamos a index.blade.php, en realidad hacer es definir lo que pasa en el interior de aquí. Así que esta sección Encabezado Derecho, lo que vamos a hacer es añadir en un botón para ir a la URL definido por la ruta nueva entrada. Sólo para limpiarlo y hacer es bonito y todo Bootstrap, vamos a hacer este botón predeterminado. Vamos a hacer lo grande para la diversión. Y dentro de ella, podríamos poner un poco de texto. Pero lo Bootstrap proporciona es glyphicons. Así que en realidad podemos añadir en esa agradable lápiz que vimos anteriormente. Glyphicon. Glyphicon-lápiz. Así que esto nos va a permitir poner en un icono en lugar de texto. Ahora bien, si nos detenemos, este definirá esta sección. Y, oye. Tenemos un botón agradable que nos une directamente al agregar una página de blog. Así que tenemos una bastante simple blog. Podemos agregar cosas a la misma. Pero lo que en general esperamos de los blogs está comentando. Por lo que es realmente importante para nosotros tener, decir, si alguien visita un sitio web y realmente le gusta el post que pueden participar en el debate con otras personas que visitan la página. Así que vamos a ir y crear una nueva tabla de base de datos y un nuevo modelo para que podamos asociar comenta con los postes. Así que el primer paso, al igual que antes, es que necesitamos para ejecutar una migración. Así como antes, lo hacemos php artesanal migran: hacer. Y vamos a crear una llamado create_comments_table. Esto creará un archivo que tiene nuestra nueva migración. Y vamos a, como antes, definir una nueva tabla. Así esquema :: crear un mesa calificó los comentarios. Esta función aquí. Y dentro de este cuadro lo que vamos a hacer es primero, como antes, asigne un ID. Incrementa ID. Vamos a permitir que los usuarios asocien su nombre con un comentario particular. Vamos a tener un poco de contenido que va de la mano con esto, el contenido del texto. Y aquí lo que vamos a hacer es algo diferente. Vamos a crear un entero eso se llama post_id que va a significar lo puesto un comentario en particular va con. Además, de hecho vamos a establecer una restricción de clave externa en esto. Así MySQL hará cumplir eso. No estamos tratando de asignar comentario número 5 para publicar 5000 si no tenemos tenía 5.000 puestos en él. Así que lo que hacemos aquí, hacemos post_id extranjera va a estar asociado con el campo ID de los puestos de la tabla. Y que en realidad vamos a hacer algo otra cosa útil, es onDelete. Así que si borramos algunos Publicación de la base de datos, que queremos conectar en cascada la borra los comentarios también. Porque no es muy útil para nosotros tener comentarios en los posts que no existen. Y, por último, al igual que antes, estamos va a establecer marcas de tiempo en esto. Y al igual que antes, vamos a tiene la migración inversa sea eliminar la tabla de comentarios. Así que ahora si nos remontamos de aquí, vamos para ejecutar esta migración, migrar artesanal. Y ahora se aplica este migración que acabamos de crear. Así que si tenemos un vistazo a phpMyAdmin, que hacemos, de hecho, ahora tener una tabla de comentarios que tiene la estructura que sólo hemos especificado. Así como antes, estamos va a crear un nuevo modelo abstraer la tabla de SQL que acabamos de crear. Así que vamos a añadir un nuevo archivo. Vamos a llamarlo comment.php. Y esto es en realidad va a ser bastante directa, con un ligero cambio de lo que teníamos antes. Así clase Comment extiende elocuente. Y lo que vamos que hacer aquí es definir una función que es la relación con otros modelos. Así que vamos a tener una función posterior aquí que devuelve esta relación. Así que estamos especificando que esto pertenece a publicar, diciendo que hay un puesto que este comentario pertenece. En realidad, esto tiene que ser P mayúscula para el modelo. Y ahora justo al otro flip lado, tenemos que decir que, hey. Mensajes tienen comentarios. Así que lo que vamos a hacer es definir los comentarios de función pública. Y aquí se devuelve Esto tiene muchas comentario. Así que ahora por arte de magia cuando tenemos un post, podemos obtener los comentarios de atributos y que va a rellenar con el información de la base de datos. Así que vamos a ir a través de realidad y añadir una nueva característica a nuestro archivo de vista de modo que poder tanto en la pantalla y crear comentarios. Así que vamos a definir una nueva sección. Vamos a la separan con una regla horizontal. Sección id = "comentarios". Lo que vamos a hacer aquí es, como antes, iterar a través de todos los comentarios. Así que en realidad la forma en que hacemos esto es, como ya he dicho, bastante mágico. Hacemos enviar comentarios. Y luego podemos hacer esto para cada bucle sobre cada uno de los comentarios. ¿Y qué vamos a hacer es div class comentario, y vamos a realidad imprimir este comentario. Así que mostrar que oye, comentar nombre-- la persona que colocó este comment-- dice dot dot dot. Vamos a poner esto en un bloque cita, sólo para que se vea bonito. Y luego comentar cita de bloque de contenido. Y foreach. Así que ahora esto va a loop a través de todos los comentarios que está asociado con cada uno de los puestos y mostrar cada uno de esos comentarios. Voy a añadir otra sección abajo aquí, lo que nos permite añadir un comentario. Así clase h3. Ponga un título aquí. Añadir un comentario. Y vamos a definir una nueva forma. Así como antes, estamos vamos a hacer una acción de formulario. Y aquí, la nueva acción es que estamos va a definir un nuevo controlador que nos permite responder a publicar las solicitudes de creación de comentarios. Así createComment URL :: ruta. Voy a pasar en el parámetro aquí. La identificación del puesto que estamos creando comentario sobre. Y a continuación, el método de esta forma va a ser puesto. Ahora vamos a añadir en un dos campos, el grupo forma. Esto va a ser una entrada con el nombre "nombre" y class = "-control de formulario", type = "text", y con la marcador de posición = "Tu nombre". También vamos a definir otro campo de formulario, que va a ser un texto área, ya que teníamos antes. Al igual que antes, lo llaman contenido. Class = "control de la forma". Marcador de posición = "Escriba aquí". Y de la misma manera que nos en realidad puede enviarlo, submit tipo y clase = "btn btn-primaria." Cierre el formulario. Cerrar esta acción. Así que ahora si volver a cargar esta página en tenemos, por ejemplo, un puesto determinado. Tenemos que reiniciar el servidor. PHP artesanal servir. Reinicie esto. Tenemos que definir la ruta. Pero por ahora, vamos a tomar este de modo que en realidad le podemos mostrar lo que la página se parece, y luego que en realidad a crear esa ruta. Así que, hey. Tenemos esta nueva forma aquí abajo para que podamos crear comentarios. Así que vamos a definir una realidad función dentro del controlador para que podamos añadir comentarios. Volvamos. Y dentro de blogcontroller.php, lo que vamos a hacer es crear una nueva función llamada crear comentario. Función createComment Pública. Esto va a tener un solo parámetro, el ID de los mensajes que estamos comentando. Y al igual que antes, estamos va a llegar primero al poste. Así que publicar, Identificación findOrfail. Después, nos vamos para crear un nuevo comentario. Por lo tanto comentario = new comentario. Comentario name = Entrada :: get nombre. Contenido Comment = la misma línea nueva en las pausas de entrada :: get contenido. Y, por último, vamos a tener que asociar este comentario con el puesto. Así que vamos a utilizar esta función, comentarios, que nos permite ahorrar esta relación. Así que ahora este comentario tendrá automáticamente el ID del mensaje. También podríamos configurarlo manualmente, pero esto es más fácil de leer en la medida ya que la función va. Y después realizamos esto, lo que quiero hacer es redirigir al usuario a la ruta especificada por viewPost con la matriz con el parámetro de la ID del mensaje. Y ahora para que esta realidad funciones, tenemos que definir esta ruta. Ruta :: puesto. Y ahora vamos a llamar a este puesto slash slash ID comentario. Matriz utiliza la nueva función que acabamos de crear. BlogController. CreateComment como createComment. Grande. Así que ahora espero que si refrescamos esta página y añadir en un comentario, por ejemplo, David Malan. "Esperamos que esto funciona." Enviar. Nosotros, de hecho, tenemos una comentar en este blog. Fresco. Así que ahora tenemos un bastante blog funcional. Sólo vamos a añadir un par de retoques por lo que tenemos un poco más útil información sobre estos mensajes. Así que si nos remontamos a la primera página, no tenemos ningún sentido de la cantidad de comentarios son en cada uno de estos puestos. Así que lo que estamos realmente va que hacer es, dentro de nuestro modelo, definir una función auxiliar que permite nos permite especificar el número de comentarios que van con un puesto determinado. Así que vamos a crear una función auxiliar. Función Pública. GetNumCommentsStr. Así que una cadena que especifica el número de comentarios que van junto con ella. Y lo que vamos a hacer es decir que num = esta comentarios cuenta. Así que vamos a contar el número de observaciones. Y si este número es igual a 1, estamos sólo va a volver 1 comentario. Y luego otra cosa, queremos volver la concatenación de num y comentarios, por lo que tenemos la pluralización correcta. Simplemente haga de esto una única oferta. Uno de los comentarios. Y ahora podemos utilizar esta función directamente dentro de nuestra visión. Así que si nos remontamos a la mensajes parciales que hemos creado, ahora queremos realmente mostrar el número de comentarios. Así que lo que podemos hacer es posterior, utilice esta función que acabamos de crear a mostrar el número de comentarios. Así que si ahora nos refrescamos, que hace, de hecho, la pantalla los comentarios de números que van junto con ella. Si quisiéramos ser de lujo si realmente mirar el código de distribución, en realidad podemos vincular esto a los comentarios. Si usted recuerda, hemos definido dentro de la ver que esto no tiene comentarios sección de identificación. Así que si en realidad quería vincular directamente a la sección de comentarios, lo que queremos hacer aquí es a href URL del viewPost ruta. Pase el ID variedad de ID de mensaje. Y luego queremos ir a específicamente la sección de comentarios. Aquí vamos a cerrar la etiqueta A. Así que ahora si refrescamos este página, hacemos clic sobre este. Iremos directamente a la sección de comentarios. Si tuviéramos un post más largo, se puede ver realmente este rebote hacia abajo. Pero te darás cuenta de que es no en la parte superior de la página. Fresco. Grande. Así que eso es un bastante sencillo ejemplo de algo sencillo que se puede hacer con Laravel. Pero usted puede notar aquí que hemos hecho un montón de cosas con bastante poca cantidad de código. Laravel nos permite hacer la Consultas SQL detrás de las escenas. Se hace el saneamiento para nosotros detrás de las escenas. Nos permite hacer estas relaciones muy fácilmente sin necesidad hacer cualquier SQL unirse declaraciones a combinar comentarios con lo que los puestos. Nos permite hacer esto herencia de plantillas de modo que podemos definir estos anidación archivos, así que no están repetirnos, al igual que cuando tuvimos que visualización de las entradas del blog que nosotros no tenemos que copia y pega el código. Y a partir de aquí se puede construir aplicaciones cada vez más complicados. Se puede imaginar si querido poner en práctica para acceder al sistema, podríamos decir, traer a un tercero marco que nos permite hacer eso. Hay un montón de ellos que son muy, muy grande que puede hacer, como, recuperación de la contraseña. Y es que una va a enviar restablecer la contraseña de correo electrónico. Podemos implementar permiso de modo que pueda crear un puesto, pero alguien más no puede editarlo. Podemos implementar funcionalidad para borrar los mensajes. Pero usted puede ver aquí que tenemos bastante tanto todos los componentes rudimentarios para construir algunos muy, muy, aplicaciones web dinámicas y emocionantes. Así que con eso, creo que estamos bien. ¿Ustedes tienen alguna pregunta? ¿Sí? ALTAVOZ 3: ¿Cómo te obtener contenido estático? ERIC Ouyang: El contenido estático. Así que usted vio antes que cuando tuvimos esto de aquí, este contenido de diseño, vista maquillaje, tuvimos este sin esta matriz después. Blog.index, tuvimos este sólo como un archivo estático. Así que si no aprobamos nada a lo largo de ella, sólo va a representar el HTML directamente. Pero si pasamos en este asociativo variedad de puestos, que es dinámicamente sacado de la base de datos, nos puede hacer que la página dinámica. Fresco. Alguna otra pregunta? ALTAVOZ 3: ¿Cómo compararía Laravel que tal vez algunas otras opciones? ERIC Ouyang: Seguro. Sí. Así Laravel es-- eso es una gran pregunta-- una de las muchas opciones para los frameworks web. Así Ruby on Rails es una que es popular. Creo Twitter solía ser implementado con Ruby on Rails. Creo que han cambiado desde entonces. Hay otra que se llama FuelPHP. Así Ruby on Rails utiliza el lenguaje Ruby e implementa un montón de cosas MVC que vemos aquí. FuelPHP es otro framework PHP. Django es uno de mis favoritos. Es un framework de desarrollo web para Python. Así que usted puede escribir su aplicación web en Python. Así que hay un montón de estas opciones. Laravel, creo, por y grande es mi derecho favorita ahora para PHP sólo porque de los componentes que hemos hablado antes. Es Compositor habilitado. Incluye un muy, muy sistema ORM expresivo. También tiene una plantilla realmente impresionante lenguaje que algunos de los otros simplemente no proporcionan. Y migraciones. Las migraciones son impresionantes. Enfriar? Impresionante. Bueno, muchas gracias por viendo este seminario, y buena suerte en sus proyectos finales.