Framework PHP Symfony 5 | Chris Worfolk | Skillshare
Buscar

Velocidad de reproducción


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Framework PHP Symfony 5

teacher avatar Chris Worfolk

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      0:28

    • 2.

      Symfony CLI

      1:08

    • 3.

      Comprobar tu entorno

      0:48

    • 4.

      Instalación de Symfony

      1:49

    • 5.

      servidor de dev de Symfony

      0:54

    • 6.

      Arquitectura de Symfony

      2:00

    • 7.

      Crear un controlador

      1:56

    • 8.

      Agrega la ruta

      0:49

    • 9.

      Uso de anotaciones

      1:50

    • 10.

      Templación

      1:39

    • 11.

      Instalación de Twig

      0:44

    • 12.

      Crear una plantilla

      0:50

    • 13.

      Uso de el controlador abstracto

      1:53

    • 14.

      Variables en Twig

      1:08

    • 15.

      Seguridad de Twig

      2:09

    • 16.

      Uso de diseños

      4:08

    • 17.

      ¿Qué son los recursos estáticos?

      0:42

    • 18.

      Servir archivos estáticos

      0:49

    • 19.

      Procesamiento de SASS

      0:58

    • 20.

      Instalación de Encore

      1:47

    • 21.

      Compilación de activos

      1:12

    • 22.

      Permitir SASS

      2:21

    • 23.

      Incluido nuestros recursos

      1:38

    • 24.

      Agrega algunos CSS

      2:43

    • 25.

      Doctrine ORM

      2:34

    • 26.

      Configuración de la base de base local

      2:09

    • 27.

      Configuración alternativa de AWS

      3:43

    • 28.

      Configuración de la base de la base de base

      2:20

    • 29.

      Crear una entidad de producto

      2:34

    • 30.

      Generación de el esquema

      1:51

    • 31.

      Importación de datos de muestra de muestra

      2:11

    • 32.

      Listar los productos

      1:59

    • 33.

      Plantilla de lista de productos

      3:07

    • 34.

      Consulta nuestra lista de productos

      0:30

    • 35.

      Opciones de ruteo de rutina

      1:31

    • 36.

      Página de detalles de producto

      1:45

    • 37.

      Plantilla de detalles de producto de producto

      2:14

    • 38.

      Manejo de errores no encontrados

      1:28

    • 39.

      Personalización de la página de errores

      2:10

    • 40.

      Añadir a añadir a la cesta

      0:31

    • 41.

      Añadir al botón de cesta

      1:24

    • 42.

      Configurar el servicio de sesión

      0:46

    • 43.

      Manejo de la entrada de la petición

      4:02

    • 44.

      Controlador de cesta

      3:35

    • 45.

      Plantilla de cesta

      4:16

    • 46.

      Ver el enlace de la cesta

      1:03

    • 47.

      Instalar el paquete de formas

      0:43

    • 48.

      Crear una entidad de pedido

      4:53

    • 49.

      Construir el checkout

      4:19

    • 50.

      Plantilla de verificación

      1:29

    • 51.

      Prueba de la compra

      1:11

    • 52.

      Procesado de el pedido

      5:48

    • 53.

      Migración de la tabla de pedidos

      1:36

    • 54.

      Enrollado de checkout

      0:55

    • 55.

      Por Por correo electrónico y las capas de transporte y transporte

      3:25

    • 56.

      Instalar el paquete de correo electrónico

      0:29

    • 57.

      Configurar el servicio de correo electrónico

      0:54

    • 58.

      Enviar un correo electrónico de confirmación

      3:21

    • 59.

      Plantilla de correo electrónico

      1:37

    • 60.

      Prueba de la confirmación de correo electrónico

      1:45

    • 61.

      Reflexiones finales

      0:26

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

190

Estudiantes

--

Proyectos

Acerca de esta clase

Symfony es el marco de PHP que utilizó los principales de PHP utilizado por los negocios reales de verdad, para crear aplicaciones web estables y escalables y modernas modernas. En esta clase, vamos a sumergirnos en los aprenderemos a aprender práctico, mientras construimos un sitio web de comercio electrónico juntos.

Abarcaremos lo siguiente:

  • Conceptos básicos y configuración de Symfony

  • Arquitectura de MVC

  • Enrutación y controladores

  • templación de Twig

  • Recursos estáticos, Encore, SASS y CSS

  • Doctrina ORM y bases de datos y de datos de las bases de datos

  • Gestión de sesión

  • Formulación y validación y validación

  • Envío de correos electrónicos

Conoce a tu profesor(a)

Teacher Profile Image

Chris Worfolk

Profesor(a)

Chris Worfolk is a psychologist and software consultant. He is the author of How To Exit VIM and Do More, Worry Less.

Ver perfil completo

Habilidades relacionadas

Desarrollo Lenguajes de programación PHP
Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: Bienvenido a esta clase sobre sinfonía PHP framework. Es impresionante tenerte aquí. Sinfonía es utilizada por montones de negocios del mundo real. Por lo que estarás tanto obteniendo experiencia que puede utilizar en tus proyectos personales como también experiencia comercial para alimentar salir por ahí como contratista o trabajando para una empresa de software. Net lo hacemos de forma práctica como todos los proyectos de participación de habilidades y construimos juntos una tienda de comercio electrónico. Entonces, empecemos. 2. Symfony CLI: El CLI sinfonía nos dará un montón de herramientas de línea de comandos que podemos usar para hacer cargar unas cosas útiles. Entonces para llegar a eso, podemos llegar a un sitio web de sinfonía y obtendrás instrucciones para cualquier plataforma en la que estés. Entonces si estás en Mac, solo necesitas copiar esto en tu terminal. Lo mismo con Linux. Si estás en Windows, entonces obtendrás ejecutable descargable y podrás descargar eso. Y eso te llevará por el proceso de instalación. No obstante lo haces una vez que hayas pasado por eso, entonces puedes abrir tu terminal en Linux o Mac. Y puedes hacer símbolo del sistema o cygwin en Windows. Y si solo tecleas sinfonía, vamos a aclarar esto primero. Entonces si consigues un comando no encontrado, sabrás que no funciona. Si obtienes toda esta información con la sinfonía CLI y todos los comandos que puedes hacer, entonces, ya sabes que está configurada y lista para empezar. 3. Comprobar tu entorno: Una vez que tengamos la sinfonía CLI, así arriba, podemos comprobar si todo lo demás está configurado usando la sinfonía CLI. Entonces si hacemos Symphony, y luego si comprobamos los requisitos de colon, esto comprobará si tenemos todo lo que necesitamos en la configuración de PHP correctamente. Y en este caso, buenas noticias, sí. Ahora hay algunas advertencias aquí que son recomendaciones opcionales, y hay algunas cosas que podría cambiar, pero absolutamente no necesitas hacer estas. Mientras consigas el ok aquí, podrías ignorar las advertencias. Esos podrían ser útiles para una configuración de producción, pero en caso de que Git comience, así que lo pillamos, vale, no importa si tenemos algunas advertencias de par. 4. Instalación de Symfony: Ahora que sabemos que tenemos nuestros entornos arriba correctamente, sigamos adelante e instalemos fuera del proyecto sinfonía. Entonces cuando llegue a la línea de comando, y voy a escribir sinfonía Nueva. Y luego vamos a dar nombre a nuestro proyecto. Ahora podríamos hacer dash, dash fall. Y eso instalaría sinfonía y un montón de bibliotecas que normalmente necesitaríamos en una aplicación web de pila completa. Pero en este caso, quiero mantener las cosas líneas delgadas que solo instalamos lo que necesitamos. Tenemos lo que necesitamos y nada más. Y podemos mostrar instalando bibliotecas adicionales en el camino. Entonces voy a saltarme eso. Y lo voy a llamar proyecto Bike Shop. Entonces sólo sinfonía, nueva tienda de bicicletas. Y luego sinfonía y saldremos y empezaremos a crear todo esto. Por lo que nos tomaremos un par de momentos para todo este giro a través IS sinfonía va y busca todas las dependencias. Y luego nos ponemos, de acuerdo, genial, para que podamos abrir esto en nuestro editor de código. voy a usar Sublime. Pero puedes usar lo que quieras. Está bien, bien. Entonces ya tenemos un montón de archivos ahí. Acude a ese directorio público, un directorio fuente. Entonces puedo ignorar. La sinfonía nos dirá las cosas que no deberíamos estar comprometiéndonos a conseguir. Tenemos el, toda la configuración para Symphony vive en el directorio S config. Y por defecto, ya tenemos un cargado este material. Y tenemos un archivo de compositor con un montón de dependencias aquí también. Está bien, bien. 5. servidor de dev de Symfony: Ahora que hemos instalado nuestra primera aplicación sinfónica, sigamos adelante y ejecutarla. Por lo que hemos vuelto a Terminal y vamos a cd en el directorio que acabas de crear. En este caso, llamé a mi tienda de bicicletas. Y haremos servidor sinfónico, arranque carillon. Y esto detendrá servidor de desarrollo de sinfonías. Simplemente un poco como PHP es un servidor web incorporado, pero específico para Symphony. Y luego si vamos a localhost, 8 mil. Perfecto. Entonces solo estamos diciendo la página predeterminada que la sinfonía crea cuando se crea una nueva aplicación. Obviamente vamos a crear nuestra propia página aquí, pero esto se ve bien. Ya está en marcha y funcionando y funcionando. 6. Arquitectura de Symfony: En esta lección, quiero cubrir parte de la arquitectura básica de Sinfonía. Symphony utiliza una arquitectura MVC Model-View-Controller. Y la forma en que vamos a hacer eso es que vamos a crear algunas clases que se llaman controladores. Y dentro de esos controladores, eso tendrá un montón de funciones. Y cada una de esas funciones representará una página diferente y dará salida a algunas cosas. Entonces eso podría ser una plantilla o que podría ser un montón de Jason, o eso podría ser un montón de HTML crudo. No obstante que desee generar, esa función volverá, asignará una URL a una clase específica y esa función específica dentro de esa clase, y entonces ese método devolverá algo. Entonces si miramos la forma en que la estructura MVC, tenemos nuestro modelo, que es nuestras entidades de base de datos típicamente almacenarán aquellos en entidad fuente. Después obtuvimos una vista que es típicamente nuestras plantillas por lo general se reducirá a nuevo motor. Y cubriremos todo esto con más detalle a medida que recorremos el curso. Y luego tenemos nuestros controladores, que son nuestras clases de PHP, que conectan los dos juntos. sinfonía es ligera, flojamente acoplada, por lo que es fácil desacoplar las cosas. Lo que eso significa es que no tienes que usar doctrina para hacer tu base de datos y no tienes que usar el motor de ramitas para hacer tu plantilla. Si quieres intercambiar un y propulsado para hacer tus bases de datos o Smarty para hacer tus plantillas, puedes. Pero la sinfonía también hace que las opciones por defecto sean realmente fáciles de integrar. Entonces si solo quieres tomar las cosas que funcionan realmente bien en la caja y no quieres meterte en el rato trayendo diferentes bibliotecas. Las cosas funcionarán muy bien juntas. 7. Crear un controlador: Ahora tenemos esta aplicación puesta en marcha. Vamos a seguir adelante y realmente crear una página, o al menos un simple mundo hola. Entonces lo primero que vamos a necesitar hacer es crear un controlador. Y tenemos esta carpeta de controladores, pero por el momento no hay nada en ella. Entonces, empecemos por escribir uno nuevo. Mételo en el espacio de nombres. Y vamos a necesitar devolver un objeto de respuesta. Sinfonía nos da uno de estos. Y luego crearemos nuestras cargas de control llaman a este primer césped de control. Voy a crear un método el cual se llama homepage. Y va a devolver una respuesta. Y en el objeto de respuesta finlandés, sólo podemos darle una cadena con algo de HTML. Diré que esta plaga lo controla, me pegó. Entonces cuando ese directorio de controlador fuente, vale, así que tenemos mayor controlador de puntos, hemos creado un método de página principal va a devolver a los encuestados. Y entonces realmente devolvimos esta respuesta, que obtenemos de sinfonía aquí. Y acabamos de devolver algún HTML que diga, bienvenido. Entonces lo siguiente que tenemos que hacer es por qué esta ruta hasta decirle a Symphony cuándo deben enviar al usuario a esta página. 8. Agrega la ruta: Para cablear camino, necesitamos entrar en el directorio config y encontrar esta rutes.rb munición. Y alguien ya se da como algo para empezar aquí. Entonces digamos que primero queremos esta rebanada. Y esto va a ir al primer controlador y lo llamamos el método homepage. Entonces le estamos dando el camino. Y te voy a dar un controlador y el nombre del método, que coincide con lo que aquí creamos. Y así ahora, si vamos a slash primero, perfecto, tenemos nuestro sencillo pequeño mensaje de bienvenida. 9. Uso de anotaciones: Tenemos ruta rápida aquí y lo definimos en routes.js demo. Pero el problema con esto es entonces tendríamos que agregar cada r2 a este archivo YAML. Y en un gran proyecto que se pondría inmanejable muy rápidamente. Por lo que hay una forma más popular de hacerlo llamada anotaciones. Hagámoslo ahora primero, descomente esto, lo que significa que esto dejará de funcionar. Lo cual no es problema. Porque en lugar de eso, vamos a usar anotaciones. Por lo que necesitamos traer la anotación, componente sinfonía, anotación de enrutamiento. Y entonces todo lo que vamos a hacer es agregar un comentario aquí usando alguna sintaxis especial de anotación, digamos root psi slash primero. Está bien, encantadora. Por lo que también necesitamos traer el paquete de anotaciones. Entonces, solo pausemos esto y sí lo compondremos, requeriremos anotaciones. De acuerdo, ahora, reiniciemos la profundidad sinfónica. Y luego si lo intentamos de nuevo ahora, perfecto, atrás. Por lo que ya no usamos en siguiente routes.js homologs comentado. Ahora cada vez que creamos un método, podemos agregar esta anotación de fila y decirle a sinfonía lo que queremos que sea el URI para este método en particular. 10. Templación: En esta lección, introduciremos el concepto de templación. Por lo general, cuando estamos construyendo sitios web, queremos nuestra lógica y estamos diseñados para ser un separado lo más posible para que no estemos mezclando todo. Y es realmente fácil ver qué diseño de bits, qué bits lógica. Y cuando queremos editar uno de ellos, no nos arriesgamos a romper el sobre uno. Y por defecto tipo de sinfonía viene con ramita. Por lo que vamos a necesitar instalar ramita como biblioteca separada. Y no tienes que usar ramita, podrías enchufarlo diferente motor de plantillas en como bigote de manera inteligente. Pero si eliges ir ramita y vamos a ir a despertar ejemplo nido. Se integrará muy bien con sinfonía porque la ramita también es construida por el mismo equipo que construye sinfonía. Y así se aseguran de que se integre realmente bien si eliges usar eso. También puedes tomar ramita fuera de Symphony y usarlo en tus propios proyectos si te gustaría, porque están flojamente acoplados. Entonces una plantilla de ramita se parece a HTML, pero solo con alguna sintaxis de ramita especial. Entonces cuando queremos agregar una variable ahí dentro, usamos esta doble llaves y luego el nombre de la variable. Y también podemos poner algo de lógica ahí como bucles, que es donde usamos el corchete rizado y luego el signo de porcentaje. Y esto nos permite hacer algunos bucles. También podemos hacer un poco de filtrado también. Yo, voy a pasar por cómo usar todo esto en este módulo. 11. Instalación de Twig: En nuestro primer controlador, acabamos de escribir The odia to continental a una cuerda, que es un poco desordenado. Sé más agradable tener plantillas. Y la sinfonía no viene con la templación porque está vagamente acoplada. Pero hay una biblioteca de plantillas construida por Symphony. Se integra realmente bien llamada ramita. Y podemos seguir adelante e instalar eso ahora. Entonces volveremos a nuestra línea de mando. Quieres componer una ramita requieren. Genial, así que esa es ramita instalada. Y ahora puede seguir adelante y crear una plantilla. 12. Crear una plantilla: Ahora que tenemos ramita instalada, vamos a crear una plantilla. Mantenlo bastante simple. Y bien cono. De hecho, esta podría ser la página de inicio, digamos homepage. Y eso es todo lo que necesitamos por ahora. Vamos a llamarlo bienvenido, y lo llamaremos bienvenido dot HTML, punto ramita. Entonces un nombre de plantilla, entonces ellos datatype. Y luego vamos a añadir esta ramita de punto al final. Y vamos a poner esto en el directorio de plantillas. Genial, ahora vamos a cablear esto en nuestro controlador. 13. Uso de el controlador abstracto: Vamos a crear controlador para renderizar esta plantilla. Por lo que probablemente podamos copiar y pegar este código desde el primer controlador, y llamémoslo controlador bienvenido. En el control de fuente o bandeja directa. Voy a cambiar el nombre. Slash bienvenido. Todavía podemos llamar al método homepage y Bob para luego cargar en la biblioteca de tuits y renderizar nuestro yo. Podemos usar el controlador abstracto de sinfonías para darnos un buen método de ayudante poco. Entonces lo primero que tenemos que hacer es traer controlador abstracto. Y entonces esta clase se va a extender. Controlador abstracto ahora se extiende par. Y lo que esto significa es que ahora tenemos esta encantadora ejecutar el método donde si le damos el nombre de nuestra plantilla, que es lo que llamamos, Hey, bienvenido a HTML esa ramita. Podemos simplemente devolver el resultado de este método aleatorio y que renderizará la plantilla. Esperemos. Entonces guarde lo que hemos hecho eso y luego volveremos a un servidor de desarrollo. Y tenemos una barra. Bienvenida. Si lo paramos cuando inculcamos ramitas, reiniciemos eso. Y ahí vamos. Se renderiza una plantilla perfecta. 14. Variables en Twig: Esto está bien para una página estática muy simple. Pero de manera realista en algún momento vamos a querer que el controlador inyecte algunos datos en esta plantilla. Y eso es realmente fácil de hacer con un pequeño ayudante. Entonces aquí para este esfuerzo aleatorio, podemos simplemente pasar una matriz de datos aquí. Y en este caso, sólo voy a agregar qué día es. Así se llama el método de fecha estándar con l minúscula que nos dará el día. Y luego podemos agregar eso a nuestra plantilla también. Entonces digamos que hoy es y en ramita para renderizar una variable, usamos corchetes dobles rizados. Entonces pasando en el die aquí, y luego estamos renderizando una plantilla. Jaja. Y si refrescamos la página, dice Hoy es miércoles, que es el diam filmando esto en. Entonces págalo. Correcto. Entonces eso parece que está funcionando. 15. Seguridad de Twig: Si estamos representando variables en la plantilla, y eso podría potencialmente causar problemas de seguridad. Pero por suerte, ramita excepto para manejar eso escapando por defecto. Entonces digamos que cambio esto y de alguna manera me pasan maliciosamente en una etiqueta de guión, algo así. ¿ Qué pasaría entonces? Bueno, ramita en realidad simplemente lo renderizaría para escapar de los personajes especiales y simplemente renderizando nuestro texto plano, así que nada de qué preocuparse por eso. Pero qué pasa si realmente necesitas renderizar algunos, Tienes una variable que contiene algún HTML y necesitas ese HTML para ser renderizado. Bueno, puedes hacer eso solo con tener una tubería y luego usar esta función cruda, que le dirá a la ramita que no se escape de ella. Ahora en este caso, esto sería malo porque ahora solo está ejecutando el código. Si bien en este caso es, Vamos a cambiar eso a una cierta pequeña actualización visible del nafta. Y ahora tenemos este JavaScript loco apareciendo. No es bueno. Por lo que si necesitas renderizar HTML, puedes usar esta etiqueta de regla. Pero sí necesitas asegurarte de que has desinfectado tu entrada para asegurarte que nadie esté inyectando algún guion peligroso ahí. Pero por defecto, aunque alguien sí inyecte un script de alguna manera, simplemente lo renderizará como texto. Está bien, eso se ve bien. Vamos a restablecer y S dos sombrero era. Y seguir adelante. 16. Uso de diseños: Esta plantilla está funcionando, pero no tiene, por ejemplo, un título ni ninguna de las etiquetas HTML head body. Ahora solo podríamos agregar esto para dar la bienvenida a dot HTML esa ramita, pero ahora sería un esfuerzo masivo porque entonces tendríamos que hacerlo por cada plantilla que creamos. Y si alguna vez quisiéramos actualizarlo, tendríamos que pasar por todo. Por lo que una mejor manera podemos usar su herencia de plantillas. Y podemos crear una plantilla de diseño estándar y luego incluirla en todo esto. Hagámoslo ahora. Por lo que vamos a parar por toda esta ramita layout.html. Y lo guardaremos en el directorio de plantillas. Widgets van a responder. Y eso pondrá el principal dentro de main volverá a eso también. Y está en algunos saltos de línea aquí porque aún no hemos peinado el encabezado en el aleteo, por lo que no va a ser obvio. Y luego dentro de aquí es donde va a suceder la magia. Entonces vamos a en ramita, cuando hagamos corchetes rizados por ciento, entonces estamos haciendo algún tipo de lógica. Vamos a llamar a este bloque de contenido. Y luego vamos a sumar este n block aquí. No necesitamos eso, creo en eso. Entonces lo que hemos hecho aquí es que hemos definido un layout. Y entonces lo hemos dicho aquí mismo, vamos a colocar el contenido. Entonces si volvemos a una plantilla de bienvenida y vamos a hacer algunos cambios aquí. Entonces voy a decir que esta plantilla se extiende, muchacho yo HTML esa ramita. Y entonces este bit va a ser el bloque de contenido. Y podríamos sumar tantos bloques como quisiéramos. Entonces si queremos un bloque de fotos separado o un bloque de cabeza aquí arriba, también podríamos sumar esos y podríamos conseguir tantos bloques como quisiéramos aquí. Ahora mismo con decir usar el layout como base. Y en el espacio de contenido que definimos, jaja, inserte este HTML. Entonces es refrescos ahora. Y genial, así que tenemos nuestra cabecera, tenemos pie para, tenemos todas las cosas en el laboratorio. Y luego en el medio, aquí, tenemos nuestro contenido que es específico de esta plantilla. 17. ¿Qué son los recursos estáticos?: Aclaremos brevemente qué son los activos estáticos. Por lo que tenemos nuestras páginas regulares con nuestro PHP, estamos generando una página bajo demanda y que podría ser personalizada a este usuario. Pero algunas cosas son simplemente entregar lo mismo a todos, como imágenes, iconos, hojas de estilo, y JavaScript. Podemos compilar estos y luego enviarlos a todos. Podríamos ponerlos en una CDN, una red de entrega de contenidos. Y no queremos que pasen por toda la pila de PHP porque nosotros, realmente no necesitamos revisar cosas como permisos o personalización. Solo necesitamos enviarles el CSS, y de eso estamos hablando aquí. 18. Servir archivos estáticos: Sinfonía nos da este directorio público aquí para ahorrar activos de y no jurarlo, guardando este autogenerar index.html, que configura todo sinfonía completa. Entonces digamos que queríamos tener un archivo robots.txt. Podríamos simplemente entrar en el directorio público y guardar eso. Y luego de inmediato, si intentamos acceder a eso, entonces funciona, lo cual es genial. Ahora podríamos hacer algo similar para CFS, donde simplemente lo guardamos en el directorio público y luego lo ponemos ahí. Pero estaría bien si pudiéramos hacer algo un poco más elaborado con él. Y buscaremos en el resto de este módulo. 19. Procesamiento de SASS: Tenemos nuestra página web aquí, pero se ve bastante feo. Así que sé agradable si pudiéramos darle estilo con CSS. Pero idealmente queremos usar algún tipo de preprocesador CSS como duraciones o calcetines. Porque estos nos dan todo tipo de bonitas extensiones a CSS. Entonces para este ejemplo, vamos a usar SAS. Si no lo has visto, puedes buscarlo en la página web. Y nos proporciona montones de cosas geniales como variables. Para que si queremos definir, digamos, un color y usarlo en montones de diferentes lugares en nuestras hojas de estilo, solo podemos definirlo guardardas. Y entonces podemos usar esa variable. Y si alguna vez queremos actualizarlo, solo necesitamos actualizarlo en un solo lugar. Por lo que pondré un enlace a las acciones del SAT en la sección de recursos de esta lección. Pero por suerte, Symphony tiene algún gran apoyo de esto. Tenemos lo que se llama sinfonía de guardia, y veremos cómo configurarlo ahora. 20. Instalación de Encore: Vamos a levantarnos y a correr. Tenemos Sinfonía propias coops. Voy a abrir una nueva pestaña de terminal aquí. Seguimos en el directorio correcto. Y yo lo voy a ejecutar. Compuestos que requieren de slash sinfonía paquete web en paquete de carbón. Por lo que esto derribará algo de lo que necesitamos. Pero lo otro que vamos a necesitar es porque la parte web no se ejecuta en tareas más que en PHP. También vamos a necesitar instalar todas nuestras dependencias de nodos, que es NPM es como el compositor de NodeJS. Entonces vamos a seguir adelante y ejecutar una instalación de npm aquí también. Y apoderarse de ese tiempo. Npm. Pero los literales pueden ser enormes. Ok. Bonito. Y eso está hecho. Entonces miramos proyecto ahora hay un par de cambios así como nuestras dependencias de compositores. Tenemos este paquete.json, ¿cuál es qué? Que es el manejo de la dependencia del NPM. Se ha instalado un montón de guiones para nosotros, para nuestro objetivo final. Y también es crear estos archivos de dependencia que acabamos de instalar con NPM install. 21. Compilación de activos: Entonces tenemos dependencias aquí y eso va a gustar mucho compositor tiene este directorio de proveedores. Tenemos este nodo módulos de subrayado, ahí es donde npm pone sus dependencias. Y también tenemos estos pequeños comandos aquí. Y para renombrarlos, podemos hacer npm run dev. Y este es el comando que vamos a utilizar para construir activos estáticos. Entonces en lo que respecta a los activos ahora de bondad, donde tenemos este CSS y tenemos este archivo JS también. Y así este es el lugar donde los editaremos. Y luego cuando rendericé eso creado en este archivo de compilación, donde obtenemos esta versión comprimida. Esa es la salida del paquete web. Y estas son las copias irrumpirán en nuestra página web. Entonces los estamos escribiendo aquí y paquete web los compilará en este directorio de compilación. Y podemos incluirlos a partir de eso. 22. Permitir SASS: Por lo que ahora tenemos paquete web tomando nuestro CSS y JavaScript y compilándolo listo para nuestro Incluido. Pero en realidad no hemos habilitado impuestos aún porque on-call soporta múltiples preprocesadores CSS diferentes, También puedes usar menos y overs. Por lo que necesitamos seguir adelante y configurarlo para SAS también. Entonces empezaremos por cambiar esto. Vamos a renombrar esto. Sas utiliza SCSS. Entonces vamos a cambiar eso. Y luego entraremos en este app.js y actualizaremos esta referencia aquí. Por lo que está apuntando al expediente correcto. Y luego bajaremos a esta parte web, dot-com ab.js. Fue creado cuando instalamos onco. Y por defecto, y tenemos esta SAS precargada, pero su comentado. Entonces, eliminemos ese comentario. Y luego tenemos esto habilita cargador Sass ahí dentro. Y luego finalmente, necesitamos instalar otra dependencia usando npm para que procese eso. Entonces volveremos a nuestra línea de mando. Hacer npm instalar dash, dash save dev para instalar la dependencia y escribir ese cambio en el paquete.json. Entonces cuando hemos estado instalando dependencias Composer, los judíos automáticamente lo están agregando. Aquí, necesitamos decirle explícitamente a npm que queremos que recuerde que hemos instalado esta dependencia y vamos a necesitar un cargador Sass. Y SAS. Está bien, genial, y eso está instalado. Entonces ahora vamos a hacer npm run dev. Sólo para comprobar que todo está funcionando. Genial, así que no hemos explotado nada. Eso son buenas noticias. Ahora, sigamos adelante y traigamos los activos que hemos creado aquí. 23. Incluido nuestros recursos: Ahora que tenemos nuestro SS compilando en este directorio de construcción pública, ¿Cómo lo metemos en nuestra plantilla? Bueno, tenemos una bonita etiqueta que nos ayudará con eso. Por lo que abrimos nuestro archivo de plantilla layout.html, ramita. Podemos hacer en tanques de enlace de entrada de núcleo. Y luego si actualizamos esta página por afecta aunque el fondo se ha ido gris. Y eso fue el CSS predeterminado en eso. Entonces esto es SaaS, pesar de que no estamos usando ninguna SAS se pone entonces aquí donde se compila. Y entonces estamos trayendo el final. Entonces si nos fijamos en HTML, pone EUR LAN. Vamos también rápidamente a Google Fonts y trayendo una espuma de hielo. Open Sans servirá. Y queremos lo regular y lo audaz. Yo creo. Simplemente voy a agarrar esto. Y creo que he abierto mandas instaladas, pero quiero que funcione en la computadora de todos. Tan agradable. Entonces estamos trayendo CSS, también estamos trayendo una fuente de aquí. Y así ahora, probablemente no quieras que se vea así. Entonces podemos ir a empezar a escribir algo de CSS. 24. Agrega algunos CSS: Convertiremos esta página bastante fea en algo un poco más bonito. Entonces primero vamos a volver a nuestra línea de comando y vamos a ejecutar npm run watch. Esto es similar a NPM cuando dev, pero funcionará para cualquier cambio de archivo. Entonces en cuanto hagamos un cambio en el archivo, se va a recompilar automáticamente. Entonces aquí cerramos todo esto hacia abajo, y abrimos esta app dot CSS. En primer lugar, voy a crear una variable. Por lo que tenemos una talla estándar para siempre colgando. Y aquí Ella es esa bonita fuente Open Sans. Vamos a n establecer signos de fuente. Deshacernos de cualquier margen por ahí también. Y el estilo F0 sobre cosas que el estilo de pie deja esa variable ponedora estándar. Nos hemos ido. Y ahora que tenemos alguna diferenciación de color, podemos apagar la línea horizontal. Y haremos algo similar con un encabezado. Nuevamente también el suelo previo a la línea azul. Y dale un bonito tamaño de fuente grande. Y algo de relleno otra vez, usando la variable de grado. Entra también a la etiqueta principal. Y voy a añadir un poco de relleno. Y luego a medida que guardemos eso, recompilará todo. Ahora si refrescamos la página, perfecto, puede que tengas que hacer una actualización dura porque no hay reventación de caché. Para que B controle, piense turno de control o tal vez en Windows. Yo solo estoy para despejar el efectivo para que no estés recibiendo la versión antigua y la hoja de estilo, pero como puedes ver, ahora que nos refrescamos, tenemos todo nuestro CSS funcionando bien, y esto está empezando a parecen una página web respetable. 25. Doctrine ORM: En este módulo, vamos a ver bases de datos y sinfonía específicamente utilizando la doctrina de RM. Orm significa mapeador relacional de objetos. Entonces esto se trata de mapear objetos en PHP a filas de base de datos. Alguien a quien sacamos los datos. ¿ Cómo lo metemos en un objeto PHP bien utilizable y cómo lo volvemos a poner? Y la idea de usar un ORM es que el ORM se encarga de todo este bosque. Por lo que solo podemos escribir objetos PHP y no tenemos que preocuparnos por el SQL. Los ORM más populares en PHP son doctrina am propel. Y si eres de otros idiomas, posible que hayas oído hablar de cosas como hibernate y Active Record. El todo hace lo mismo. No tienes que usar verde oscuro para Symphony, pero está realmente bien integrado, por lo que está flojamente acoplado, pero sí se integra muy bien. Y obtienes mucha funcionalidad fácil fuera de la caja. Y la doctrina nos permite utilizar prácticamente cualquier plataforma de base de datos. Entonces podríamos usar MySQL, MariaDB, y voy a usar MySQL en este ejemplo porque eso es lo más común para emparejarse con aplicaciones PHP. Pero también podrías usar Postgres, Oracle, SQL Server, SQL lie. Y realmente no necesitas hacer muchos cambios a esto. Simplemente le dices a doctrina lo que quieres usar. Escribes tus objetos PHP. Y de nuevo, la doctrina se encarga de todo esto. Entonces, ¿cómo funciona? ¿ Cómo mapeamos realmente nuestros objetos PHP a la base de datos? Utilizamos clases especiales a las que vamos a llamar entidades, pero esencialmente Git de clases regulares de PHP con algunas anotaciones en. Y este es un ejemplo de cuándo vamos a escribir para un producto y usamos una anotación para decir, vale, esto es y entidad. Por lo que una entidad es análoga a una tabla en la base de datos. Entonces oye, tenemos clase de producto. Y luego vamos a tener instancias de esa clase. Y eso es como decir que tenemos tabla de productos en la base de datos y va a haber filas dentro de esa tabla. Y luego cada una de las columnas usamos anotaciones para mapear también. Entonces, por ejemplo, podríamos tener una propiedad id y un punchy getters y setters en la clase. Y lo vamos a marcar usando anotaciones para decir, vale, esta es la columna ID en esa tabla, y así es como la doctrina sabe mapearla. 26. Configuración de la base de base local: En este módulo, vamos a configurar la base de datos. Doctrine apoya un montón de plataforma por lo que técnicamente podrías usar a cualquiera que desees. Si tienes MySQL y PHP, mi administrador instalado localmente, entonces genial, esta lección es para ti. Todo lo que queremos hacer es ir a crear una base de datos. Entonces soy jets en PHP, mi administrador aquí. Voy a crear una base de datos llamada Byte Shop. Y luego voy a ir a la pestaña de privilegios. Y cuando subo a la cima, porque quiero crear un nuevo usuario. Consigamos unas cuentas de usuario y grit Nuan, tiro combinado criminal del anfitrión local. Voy a dejar que pitch por medio min, genere la contraseña. Y lo importante, vamos a necesitar usar vista nativa de autenticación MySQL en algunas de las nuevas innovaciones un PDR, puede que no necesite hacerlo, pero es solo un problema de larga duración con PHP que necesita usar MySQL nativo autenticación o tarea. Entonces eso es sólo Slashdot en algún lugar seguro. Y podría haber creado primero la cuenta de usuario. Pelea para preguntarme qué pasa si tomo mate. Ok, entonces eso lo deja ir. De acuerdo, ahora, así que hemos creado este usuario de la tienda de bicicletas, y también hemos creado esta base de datos de tiendas de bicicletas. Así es como lo vamos a hacer. Si tienes MySQL y PHP, mi administrador instalado localmente. Si no, te mostraré cómo podemos hacerlo en Amazon sin que tengas que instalarlo localmente. En la siguiente lección. 27. Configuración alternativa de AWS: Si no tienes MySQL tal que localmente y estás pensando, Chris, realmente no quiero hacer eso. Es mucho esfuerzo. Mi computadora no tiene tanta memoria. La buena noticia es que también podrías conseguir los servicios web de Amazon alojen tu base de datos. Por lo que si ya estás configurado con Amazon Web Services, probablemente puedas usar ese nivel gratuito para pasar por este curso. Y la forma de hacerlo es iniciar sesión en la consola, console.log AWS a amazon.com. Y él podrías acceder a todos los servicios web de Amazon como EC2 y S3 y todo eso que queremos hoy no vamos a RDS Relacional día por servicio. Y esto esencialmente te dará una base de datos MySQL en la nube. Y aquí es cuando dos configuración diferente, esta Amazon de aura está bien porque eso es compatible con MySQL. Por lo que hacemos clic en crear base de datos y vamos a, incluso ahora, hay una opción para MySQL. Mariadb también estaría bien. Vamos a usar Amazon Aurora porque lo es, y podemos ver aquí es compatible con MySQL. Podemos seleccionar versión scanf, algo un poco más moderno. Este. Y va a ser una prueba de Devin1. Ese clasificador de televisión está bien. Solo usemos la misma contraseña aquí. Obviamente, voy a borrar sólo estas credenciales. Después de terminar de filmar este curso. Todas esas opciones están bien. Vamos a seguir adelante y haga clic en crear base de datos. Y toma un poco de tiempo para que Amazon haga cualquier cosa en la nube. Por lo que tardará tal vez 510 minutos en configurar esto. Pero si subimos a esta vista credenciales aquí, entonces podemos ver que tenemos el admin y la contraseña. Y una vez así podremos conectarnos a base de datos también. Entonces esas son las credenciales que necesitas si vas a acceder a ella de esta manera, obviamente no tendrá PHP mi admin. Podrías configurar PHP mi administrador para hacer eso. Pero lo más probable es que hagas es usar software como yo tengo SQL prohibir un Mac. Pero también Heidi es realmente buena. Si estás en Windows. Y podrás crear una nueva conexión aquí. Y solo pondrás todas las credenciales que obtendrás del cabello. Genial, así que ahora, ahora está cargado. También tenemos una ha, admin. Tenemos nombre de usuario, contraseña, y también tenemos la ubicación a la que necesitamos conectarnos también. Entonces esas son las credenciales que necesitarás poner al iniciar sesión usando algún tipo de cliente SQL, como SQL bro 28. Configuración de la base de la base de base: Ahora que hemos creado una base de datos en MySQL y quien sea la plataforma que estés usando, necesitamos ir a configurar nuestra app sinfonía para poder conectarte a ella. Entonces volvemos a nuestra terminal, solo vamos a cancelar y necesitamos empezar a instalar cosas. Los listones sí componen que requieren paquete ORM sinfonía. Y esto traerá las bibliotecas que necesitamos para usar la doctrina ORM. Entonces solo dale un minuto para dar vuelta a eso. Está bien, bien. Y luego nosotros también para ayudarnos a hacer algo del edificio, vamos a hacer requerir pero dash, dash, dash, porque esto va a ser un dev dependencias que vamos a usar al desarrollar localmente, pero no vamos a necesitar ella para la producción. Vamos a necesitar que la sinfonía pueda venir paquete. De acuerdo, ahora, así que tenemos todas las dependencias que necesitamos. Ahora. También necesitamos configurar esto en el archivo a.m. Entonces tenemos esta URL de base de datos aquí. Por lo que llamamos uso de tienda de bicicletas y tenemos una contraseña aquí. Y cambiemos esto a localhost. Y D b también se llama tienda de compra. Y lo otro que tenemos que hacer es pasar la versión de MySQL corriendo si nos estamos conectando a un MySQL. Creo que estoy corriendo una versión bastante ligera 8. De acuerdo, ahora, así que hemos instalado nuestras dependencias y hemos actualizado la URL de nuestra base de datos con la ruta correcta. 29. Crear una entidad de producto: Ahora hemos configurado nuestra base de datos, es momento de hacer nuestra primera entidad. Y una entidad representa una tabla de base de datos. Y podríamos escribirlo todo desde cero. Pero a menudo es más fácil usar las herramientas incorporadas que obtenemos. Tenemos doctrina y sinfonía. Entonces vamos a petri Ben consola. Cuando sí haces entidad de colon. Y voy a darle un nombre. En este caso, lo vamos a llamar producto. Y esto nos llevará a través de una serie de preguntas en cuanto a cómo queremos que se vea la entidad. Por lo que necesitamos organizar propiedades, por ejemplo, un nombre. Y va a ser una cuerda. Está bien, bien. Y el precio sentado va a ser un lado decimal , una imagen que en este caso también va a ser una cadena. Simplemente puede apuntar a un nombre de archivo. Diga que éste puede ser nullable. Y vamos a tener una descripción. Va a ser un texto. A continuación, uno puede ser anulable también. Está bien, bien, y eso está hecho. Vamos a ver qué se crea eso. Por lo que ahora tenemos esto dentro de la fuente. Llamaremos a esta carpeta de entidad. Y tenemos este producto. Entonces es cualquier espacio de nombres de entidad. Y tiene todas las propiedades que hemos creado, el nombre, precio, descripción de la imagen. También tiene getters y setters generados para todos esos métodos. Y también tenemos su propiedad ID que se agrega automáticamente para nosotros. Y luego también tenemos este repositorio de productos que usaremos para buscar en la tabla también. Entonces eso es todo lo que teníamos que hacer era contestar esas preguntas. Y todo este código se generó para nosotros. 30. Generación de el esquema: Tenemos nuestra clase de entidad de producto aquí con nuestra base de datos en sí todavía está vacía. Ahora podríamos crear manualmente las tablas. Pero porque ya hemos definido cómo queremos que se vea nuestra entidad de producto. No necesitamos hacer eso. Podemos conseguir que la doctrina haga eso por nosotros. Y lo hacemos por ahí en PHP sido consola hacer migración de colon. Y eso debió haber creado un archivo de migración. Entonces si estamos mirando ahora, dentro se nos devuelven directorio migraciones. Y esto nos da una forma de actualizar y rebajar programáticamente la base de datos. Y tiene su propio método donde está creando esta tabla y un método down para deshacerse de ella. Y entonces podemos correr eso. Podríamos automatizar eso como parte de nuestro proceso de construcción. Pero aquí lo vamos a ejecutar de forma manual. Entonces volvamos. Y ahora que estamos contentos con el SQL que se genera al ejecutar doctorando migraciones de colon, el colon migra. Y eso ejecutará el script de migración. Y ahora si volvemos a nuestra base de datos, perfecto, tenemos nuestra tabla de productos. Si miramos la estructura, coincide con la estructura de la entidad. Entonces ya lo hemos hecho, acabamos de escribir el código PHP y todo el SQL fue atendido por nosotros usando doctrinas, herramientas. 31. Importación de datos de muestra de muestra: Ahora que tenemos base de datos o de ejecutar este jugo Bev admin hoy. Entonces si entramos en la tabla de productos, está vacía. Y ser amable si tuviéramos algunos ejemplos ahí dentro. Por lo que he proporcionado esos para ti. Entonces si tomamos muestras de código SQL, podemos correr bien. Sólo cavémoslo y peguémonos aquí en el SQL. Por lo que ojalá hayas descargado el código de ejemplo. Y yo lo tengo aquí. Simplemente abriré esto. Si entras en el código de ejemplo que puedes obtener de GitHub y entras en este archivo de recursos. Ese es este ejemplo de productos, el SQL para copiar y pegar eso en y puede hacer esto en PHP, mi administrador. O si estás usando la base de datos de Amazon, podrías usar SQL pro o Heidi tendrá cliente SQL que configuraste y simplemente ejecutar el SQL. Y luego obtendrás todos estos ejemplos. Aquí hay un par de otras cosas que queremos copiar desde el código de ejemplo a nuestro proyecto en público. Traigamos todas estas imágenes. Y también en los activos y CSS ha permitido de agradable aire CSS. Entonces otra vez, sólo copiemos eso. Y si vuelves a tu proyecto, entonces encuentra todo Menos CSS. Y sólo pongámoslos al día. Entonces diremos npm run dev solo para reconstruir el CSS que tenemos. Por lo que al final de esto debería tener algunos productos de ejemplo en su base de datos. Deberías tener algo de CSS actualizado. Y deberías tener un montón de imágenes aquí también. Y esto los ayudantes de Git aceleran las cosas a medida que pasamos por el proyecto. 32. Listar los productos: Ahora que tenemos todo configurado, sigamos adelante y creemos un controlador y renderizar algunos de estos objetos de base de datos. Entonces tenemos, así que vamos a entrar y sólo copiarlo a precio. Tomemos un controlador de bienvenida. Y llamaremos a este producto Control-A. Y vamos a querer traer ese repositorio que fue genial para nosotros. Vamos a renombrar esto a páginas de inicio de controladores de productos. Bien. Hagamos de esto el daño real que se le prometió a la raíz sólo será rebanada. Y luego vamos a usar algo del cableado mágico y sinfonía, digamos, traer el repositorio y llamarlo repo. Entonces esto significa que cuando Symphony llama a este método, se va a inyectar automáticamente el repositorio Paul, que es lo que va a utilizar para buscar en la base de datos. Y luego aquí, vamos a conseguir una lista de bicicletas presupuesto diciendo repo, Find By. Este es un método donde podríamos poner columnas aquí. Entonces podríamos hacer nombre igual a bicicleta x Pero en este caso sólo vamos a encontrar de todo. Entonces sólo lo vamos a dejar así. Y entonces aquí le vamos a decir que renderice una página de inicio. Y pasaremos en nuestra lista de motos. De acuerdo, todo esto se ve bien para el controlador de productos. Ahora ya está en marcha Crear plantilla en la siguiente lección. 33. Plantilla de lista de productos: Ahora si creamos nuestro controlador, vamos a crear una plantilla también. Entonces solo copiaré y pegaré. Bienvenido. Y llamaremos a esta página principal HTML la ramita. Han sido el directorio de plantillas. Y vamos a extender el diseño como antes. Vamos a cambiar este código. Copiamos en algún bonito CSS, y lo usaremos aquí. Y usamos alguna lógica de ramitas. Entonces diremos para bicicleta, en bicis, OK. Y cierra el div. Y entonces se va a crear un bucle aquí. Diga si imagen de bicicleta. Y eventualmente vamos a encaminar esto a una página de producto. Entonces digamos algo así. Y así es como el nombre del byte, y va a ser un enlace también. Y luego finalmente pondremos precio. Ahí vamos. Enfriar. Entonces echemos un vistazo a lo que estamos haciendo aquí. Es que estamos buceando a través de comer a las bicicletas. Y estamos diciendo que si tiene una imagen, exhiba la imagen. En caso contrario, solo muestra el nombre y el precio. De acuerdo, entonces si revisamos nuestro servidor dev todavía en ejecución, parece que se reinicia solo para asegurarnos de que tenemos todas las dependencias de luces en. Y luego si solo conseguimos una barra, no podemos encontrar nuestro repositorio de productos, creo que porque tengo un espacio de nombres mal ahí. Por lo que va a ser entidad app para oponentes de árbol. Vamos a volver a comprobar aquí. Y aún. No es repositorio. Solucionemos menos en la siguiente lección. 34. Consulta nuestra lista de productos: De acuerdo, cuestión tan simple aquí, ya que soy una S extra ahí dentro. Y una vez que arreglamos eso, funciona bien. Genial. Por lo que estamos tomando todos los registros en la base de datos, que estamos haciendo usando este repositorio de productos, pasando a la plantilla. Y entonces la plantilla está recorriendo los mismos y mostrándolos todos. Ahí. Tenemos nuestra conexión de base de datos en marcha y trabajando y recuperando datos. 35. Opciones de ruteo de rutina: Sinfonía nos ofrece un montón de opciones cuando estamos definiendo raíces. Entonces, hasta el momento acabamos de definir una ruta estática. Wove acaba de decir, esta es nuestra manera. Queremos que se asigne al método que hemos anotado. Pero también podemos usar variables. Teniendo ese segundo ejemplo, tenemos esta idea de babosa por digamos, una entrada de blog. Cada entrada de blog va a tener su propio sitio de slogan para acceder a eso, tendremos que llegar allí. También podemos limitar los métodos que la gente usaba para llamarlo. Entonces cosas como get, post, put, delete, podemos decir, OK, solo queremos que estas raíces mapeen aquí si es uno de estos métodos por defecto, si van a aceptar monjes a ellos. Pero podemos limitar eso si queremos. Podemos dar la ruta y el nombre, lo cual es útil si estamos haciendo cosas como redirecciones. Y queremos redirigir a una ruta específica. Podemos darle un nombre, y también podemos agregar filtros a los parámetros. Entonces por ejemplo, en el tercer ejemplo, si ID sólo se supone que es un número, y no queremos que la ruta coincida si hay algún carácter y eso, y los caracteres alfabéticos, entonces podríamos agregar requisitos y decir, vale, esto tiene que coincidir con esta expresión regular. Entonces las sinfonías, las anotaciones de enrutamiento, pesar de que solo hemos usado realmente las básicas hasta ahora, tienen un montón de otras opciones. Y entraremos en algunos de estos parámetros en este módulo. 36. Página de detalles de producto: Hemos creado una lista, pero queremos poder hacer click en estos y ver los detalles. Entonces sigamos adelante y nos ocupemos de eso. Entonces vamos a crear un nuevo método dentro de nuestro controlador de productos. Y empecemos definiendo la raíz. Entonces va a haber productos de slash. Y luego vamos a tener la identificación. Y pondremos el ID y llaves para dejar sinfonía ahora es variable. Y luego definiremos los métodos. Porque aquí hemos sumado variable, podemos tomar ID como variable en el método. Y también vamos a querer un montón de otras cosas. Por lo que tomaremos una solicitud en. Y vamos a querer de nuevo nuestro repositorio de productos. Y vamos a devolver una respuesta. Si yo, vamos a deshacernos de esa petición por ahora. Y creo que aquí vamos a usar eso. Y lo primero que tenemos que hacer es encontrar la bicicleta correcta. Y lo podemos hacer sólo usando el método find que nos permite pasar en una clave primaria. Y en este caso tenemos el DNI, por lo que podemos hacer eso. Y entonces todo lo que vamos a hacer es renderizar una clase de plantilla. Vamos a pasar en la moto. Entonces eso debería ser todo lo que necesitamos inicialmente para esto. Vamos a seguir adelante y crear una plantilla para ello en la siguiente lección. 37. Plantilla de detalles de producto de producto: Vamos a crear una plantilla. Por lo que probablemente podamos usar la página de inicio como base. Lo llamaremos detalles a ramita HTML. Y poner un poco de pan sale. Por lo que este usuario para navegar fácilmente de nuevo a la página de inicio. Y entonces esto va a ser detalles del producto. Algunas bonitas CSS preconstruidas. No vamos a estar buceando por las motos porque sólo tenemos una bicicleta. Y aquí, tomemos la imagen de la moto. Y luego el segundo div, y poner un nombre de byte en H1 y poner el precio debajo de él. Y golpea Buena ciudad aquí. Diga si una bicicleta tiene una descripción. Está bien, se ve bien. Entonces ahora si vamos a aquí y hacemos click a través de una bicicleta, perfecta, así que tenemos un poco de miga de pan, tenemos nuestra imagen, pones el nombre y el precio. Y tenemos la descripción leyendo en la parte inferior también. 38. Manejo de errores no encontrados: Esto funciona bien por ir desde la página de inicio y hacer clic en por detalles ¿qué sucede si este ID estaba equivocado? Fue para una bicicleta inexistente. May quitamos una bicicleta y aún había un viejo eslabón ahí. Bueno, yo lo haría todo Condie va mal y obtenemos 500 era porque la moto es nula, pero seguimos tratando de acceder a la imagen. Entonces agreguemos un poco de manejo para volver a comprobar eso. Entonces vamos a entrar en una página de detalles. Y aquí voy a decir si la bicicleta es no, lo siento. Y eso es lo que obtenemos del método fino. Si no encuentra el ideal, Sólo danos saber. Entonces podemos usar algunas otras sinfonías, buenos métodos de ayuda. Sólo para decir que este byte no existe. Entonces para, para siempre. Y si volvemos, está bien, esto está bien. Entonces parece igual porque sigue siendo una página de error, pero ahora obtenemos un error a para la fila cuatro en lugar de un error 500. Entonces el servidor no está explotando. Esta es una zona que esperamos que suceda y podemos hacer que esta página se vea un poco más bonita para el usuario. 39. Personalización de la página de errores: Si el usuario sí consigue una era de cuatro o cuatro, lo que queremos que se vea un poco más bonita de lo que esto coincida idealmente con nuestro diseño. Y podemos hacer eso con bastante facilidad. Entonces tomemos, solo tomemos una página de inicio otra vez y lo haremos. Pero si aire de personalización, por lo que todavía vamos a traer en el diseño. Pero vamos a deshacernos de este viejo contenido. Diré página no encontrada. Y luego diremos a alguien como, lo siento, la página que buscas no existe. Y les damos un enlace de vuelta a la página de inicio. Ahora la forma en que hacemos que esto funcione es súper simple en AIG, pero un poco incómodo. Por lo que necesitamos llamar específicamente error para o para la ramita de puntos HTML y dentro del directorio de plantillas cuando cualquiera de dos créditos no son paquetes de goteo. Y luego dentro de Bundles Vamos a crear uno llamado ramita 10. Y dentro de eso vamos a necesitar crear una llamada excepción. Y entonces finalmente lo salvaremos. Por lo que plantillas bastante específicas, paquetes, paquete ramita, error de excepción para cuatro. Y eso no es un poco de espaciado y eso también, vale, eso se ve bien. Ahora porque estamos ejecutando el servidor de desarrollo, en realidad no vamos a obtener la página de error aquí seguirá obteniendo la cosa de depuración sinfónica. Pero si queremos probar cómo se ve nuestra página, podemos hacerlo yendo a subrayar era y luego poner el código de error en este caso cuatro o cuatro. Y esto aquí podemos ver que tenemos nuestro error de página no encontrado, y esto es lo que dirá el usuario en producción. Por lo que en desarrollo obtenemos la sinfonía completa siempre pilas que podemos depurar culpar a la producción. El usuario vería esta bonita página de error que acabamos de crear. 40. Añadir a añadir a la cesta: En este módulo, vamos a cuidar la funcionalidad anti canasta. Por lo que vamos a necesitar algún tipo de botón de agregar a la cesta que permita a los usuarios agregar bicicletas para mentir cesta igual que cualquier plataforma de comercio electrónico. Y vamos a necesitar persistir esa canasta de múltiples páginas. Por lo que una vez que han agregado, no desaparece en la siguiente página. Y por suerte, la sinfonía mx es realmente fácil de hacerlo al envolver la funcionalidad de la sesión de PHP en algunas funciones agradables y fáciles de usar. 41. Añadir al botón de cesta: Ir a la plantilla de detalles aquí. Entonces sigamos adelante y le agreguemos este botón de Canasta. Entonces si abrimos la plantilla de detalles y bajo precio, sólo vamos a la forma de basura. Y luego n hat, usaremos una variable que aún no hemos creado. Y diremos f en canasta. Si ya está en la canasta y no queremos que EU construya para agregar de nuevo. Por lo que haremos un botón deshabilitado y les daremos algunos comentarios. Es Odeon diciendo añadido a la canasta. Y si no, entonces crearemos un botón hasta la canasta. Y vamos a hacer la M sorda. Y ya cerramos nuestra espuma. Genial. Entonces si refrescamos ahora, se va a quejar que la canasta no existe. Entonces vamos a crear eso. Y quiero falsear por ahora. Perfecto. Por lo que ahora tenemos este botón. No hace nada, pero el botón en sí es que vamos a cablearlo en la siguiente lección. 42. Configurar el servicio de sesión: Configurar la sesión va a ser agradable y fácil porque el manejo de sesiones viene con sinfonía. Incluso en una instalación básica, hay alguna configuración que podemos ver. Entonces si entramos en la configuración y luego en paquetes, vamos a este framework. Oye, tenemos un montón de opciones para la sesión así que podríamos cambiar el manejo de la sesión si quisiéramos. Pero en este caso, todo lo que la sinfonía nos da por defecto está bien. Entonces podemos dejar este framework dot yaml tal como está, y estamos listos para irnos. Podemos simplemente usar sesión fuera de la caja. No necesitamos instalar ninguno de los paquetes. 43. Manejo de la entrada de la petición: Ahora que sabemos que podemos usar un servicio de sesión y tenemos una plantilla. Podemos entrar y cablear en controlador de productos. Y un par de cosas necesitaremos sólo el objeto de solicitud porque uno era el objeto de respuesta para mi Fundación HTTP. Y también puede necesitar traer en nuestra sesión. De nuevo, esto también es un paquete de fundación HTP y la sección I hace interfaz de sesión. Por lo que hemos conseguido iOS. Por lo que ahora podemos usar esos de aquí abajo. Y de nuevo, tenemos sinfonías, magia donde sueno. Obtenemos toallita sinfonía lo que queremos. Y se encargará de realmente cableado en eso para nosotros. Por lo que no tenemos que pasar explícitamente ninguno de estos n. sólo decimos Will not the request and the session interface y sinfonía y nos encargaremos del resto. Ok, entonces ahora agreguemos un poco de manejo para este código. El primero es que vamos a conseguir canasta. Y el segundo parámetro que llamamos al gatt es el predeterminado. Entonces si no hay canasta en la sesión, lo hicimos, se va a conseguir una matriz vacía. Y entonces vamos a decir, esta solicitud es una solicitud de post en lugar de una solicitud GET? Si es así, sabemos que hemos hecho clic en el botón anthro Basket y en la EFSA. Y vamos a sumar la moto. Y luego una última cosa es, y necesitamos actualizar esto en variable de canasta. Y sólo entraremos asustados y hablaré por ello. De acuerdo, entonces estamos recibiendo el escarabajo, la sesión. Y si no lo es, entonces solo tendré una matriz vacía, lo cual está bien, esa es una canasta vacía. Y entonces estamos diciendo que si se trata de una solicitud de post, los usuarios hacen clic en el botón. Entonces lo que queremos hacer es añadir la moto a la canasta. Vamos a usar el ID como la K en una matriz asociativa y luego guardar el byte en eso. Y luego vamos a escribir la canasta actualizada de vuelta a la sesión. Y luego aquí abajo, vamos a decir, vale, busca la canasta llena esta moto. Y si es A1, entonces las motos ya en la canasta para que podamos mostrar el botón over. Entonces, solo actualicemos esta página y en la canasta. Y boom, ahí está. Ahora estamos realmente agregados al botón de la cesta porque se está agregando. Y a medida que recargamos la página, se ve en la sesión, encuentra la moto ya está ahí. Y vamos a refrescarnos para asegurarnos de quedarnos, es perfecto. 44. Controlador de cesta: Tenemos que sumar a la canasta funcionalidad funcionando. Entonces lo siguiente que queremos es poder ver realmente una canasta. Nube alguien ha caído. Y yo copiaré y pegaré. Los productos pueden probar mucho. Y llamaremos a este controlador de una canasta. Esto también le renombrará el nombre. Y entonces solo llamaremos a esta canasta y pondremos una raíz para cortar canasta. No sé cómo esta ID está bien. Agradable. Y entonces simplemente nos desharemos de todo este código también. Lo primero que vamos a hacer es lo mismo que hacíamos antes si solo conseguimos una canasta. Y esa es la canasta está vacía, será por defecto una matriz vacía. Y añadamos la capacidad de eliminar cosas de la canasta también. Entonces psi es método. Vamos a conseguir la identificación y esto tendrá más sentido cuando hagamos la plantilla. Entonces si un usuario quiere eliminar algo de la canasta, publicaremos el ID y conseguiremos la idea, oye, quítalo de la matriz de canastas. Y luego escribiremos esa canasta de vuelta a la sesión con el elemento eliminado. Y lo siguiente que queremos hacer es que queremos brindar algún tipo de total. Entonces vamos a iterar a través de la canasta y sacar cada precio. Entonces aquí vamos a mapear a través de la canasta. Sabía que fui y me senté aquí y ellos infringen uno obtienen precio. Y luego una vez que tengamos todos los precios, solo sumémoslos juntos. Y eso nos dará un título. Y entonces vamos a renderizar todo. Tan bien. Plantilla llamada basket dot HTML look ramita que creará más adelante. Y voy a pasar algunas cosas. Y así vamos a pasar la canasta que podamos iterar a través de todo lo que hay dentro. Y vamos a congelar el total que hemos calculado también. Está bien, eso se ve bien. Vamos a crear la plantilla en la siguiente lección. 45. Plantilla de cesta: Ahora que tenemos un controlador de canasta, sigamos adelante y creemos una plantilla. Por lo que sólo agarraré detalles dot HTML en ramita, guardar, eso es canasta cantidades Dykstra en ramita en el directorio de plantillas. Usamos las migas de pan, todo lo demás puede ir. Voy a llamarlo canasta grad div con la clase de canasta. Una vez más, ya tenemos algún bonito CSS en. Y lo primero es que vamos a recorrer todas las bicis. Y vamos a usar un poco de filtro en ramita. Por lo tanto, llame al método de formato numérica. Y esto agregará automáticamente un en comas Soy decimales y lo hará quedar bien. Y también lo vamos a agregar en esta habilidad para quitar algún ventilador. Entonces aquí voy a agregar un botón que diga Eliminar. Y vamos a añadir un oculto por KID. Sí. Por lo que ahora forma un botón de quitar, envía un ID de bicicleta para que en el donde estamos agarrando el ID, quitándolo de la matriz. Tenemos eso. Agradable. Y oye, vamos a añadir una última fila. Yo sólo voy a decir título. Y de nuevo, vamos a llamar a este pequeño método de ayudante en formato de número ramita. Eso funciona igual que el formato de número base de pitch. Es casi seguro la misma función subyacente. Está bien, y eso se ve bien. Y lo último que está fuera del check out de botón. Obviamente esto no hará nada porque no hemos construido una caja, pero lo vamos a usar más tarde. De acuerdo, entonces esa plantilla me queda bien. Intentemos de nuevo una canasta de corte. Y ahí vamos. Tenemos nuestra moto. Volvamos a la página de inicio. Y eso es más bicis. Y entonces nunca lo llevaremos de vuelta a la canasta. Ohms, si pudiera deletrear canasta, correcto. Y luego pasamos por las tres de nuestras bicicletas muy bien formateadas para usar el signo del dólar en lugar de una sauna de libra. Skype. Arregla eso. Está bien, bien. Y también podemos presionar este botón Eliminar y desaparece de la canasta. Está bien, encantadora. Entonces lo único que realmente nos falta ahora es esta nueva forma de llegar a la canasta. Entonces arreglemos eso en la siguiente lección. 46. Ver el enlace de la cesta: Añadamos un enlace para que podamos llegar a la canasta desde uno que estamos en la página de inicio. Entonces entraremos al lab de layout, tiene twig y diremos f session, que nos dará acceso al objeto de sesión desde dentro de twig y su variable de app tiene cargas sobre útil Stefan. Entonces si tienes una necesidad de obtener acceso a una variable que tipo de una variable global que ella está a lo largo de la aplicación. A menudo se puede encontrar el on app. Y diremos que saquen canasta. Y luego hacer un endif. Y luego crearemos un enlace para recortar canasta. Y sólo lo llamaremos v canasta. Refresca la página. Y ahora tenemos este bonito botón grande V Basket que nos lleva a la página de la cesta. Perfecto. 47. Instalar el paquete de formas: En qué funciona la canasta, pero ahora necesitamos la página de tachado. Y para ello, podríamos usar escribir manualmente un formulario. Pero eso suena como mucho esfuerzo cuando podemos tener Sinfonía aún permitirnos el levantamiento pesado para nosotros y podemos hacerlo con forma sinfónica. Entonces vamos a seguir adelante y hacer el placer requieren forma de guión sinfónico. Dejaremos que eso se dé vuelta por un momento y, y eso derribará la biblioteca de formularios que vamos a usar. Y entonces podemos empezar a crear el código PHP en sí. 48. Crear una entidad de pedido: El primero que vamos a necesitar es algún tipo de entidad de orden que podamos persistir en la base de datos para hacer un registro de la misma. Y podríamos usar de nuevo la utilidad make, pero por qué no obtenemos algo de experiencia práctica creando una entidad. Y empezaremos de manera perezosa simplemente copiando y pegando producto dot PHP en PHP punto más antiguo. Y nos desharemos de eso. Pero vamos a traer una herramienta inevitable de drenaje dopado es la colección de array. Entonces no voy a involucrar este punto con una clase de repositorio, pero vamos a necesitar burlarnos como entidad y vamos a darle un nombre de tabla porque si lo llamáramos más viejo que la tabla de base de datos se llamaría orden. Y por supuesto, el orden es una palabra reservada en SQL. Y así cada vez que tratamos de ejecutar una consulta, MySQL nos daría un error diciendo, no entendamos lo que está pasando aquí. Esta es una palabra reservada. Por lo que podemos usar esta anotación para decir Son los scripts de migración para llamarlo órdenes en lugar de orden. Veamos qué más tenemos aquí. Entonces vamos a necesitar el DNI, claro. Y vamos a querer un nombre también. Y luego también vamos a querer una dirección de correo electrónico. Y vamos a querer una dirección postal también. Creo que todos nosotros como se requiere, no vamos a necesitar esta imagen de píxel para que podamos deshacernos de eso. Y entonces lo otro que vamos a necesitar hacer es que vamos a necesitar tener una lista de productos. Y sólo vamos a ejecutar algún código y luego hablaremos a través de él. Entonces tenemos esta variable llamada productos y ¿qué tipo de datos es? Por ejemplo, los ataques de éste. Esta es una cuerda. Bueno, este, es un producto tipo F tiende t, Es una matriz de productos. Y así podemos usar esta etiqueta de muchos a muchos para decir doctrina para obtener relación entre el pedido y la entidad del producto. Ahora si vamos a hacer eso sobre cosas que necesitamos hacer es darle un valor por defecto porque va a ser una matriz de productos. Por lo que necesitamos establecer por defecto, quiere ser una colección de matriz. Y luego aunque esté vacío, entonces todavía vamos a conseguir todos esos valores. Bueno, deshazte de este precio e imagen. Pero queremos chicos y satisfacer por el correo electrónico. Entonces esta descripción va a ser dirección. Vamos a armar un fideicomiso. Y entonces lo último que necesitamos hacer es agregar un dato para obtener la matriz de productos que no necesitamos establecer. Está bien, bien. Por lo que ahora tenemos nuestros segundos extremos a la entidad Orden, cual tendremos una identificación, nombre, dirección de correo electrónico, y dirección. Hola la persona que realiza la compra. Y una variedad de productos que también han sido la ADA. 49. Construir el checkout: Ahora que tenemos entidad mayor, sigamos adelante y creemos un controlador. Ese será nuestro controlador de checkout. Entonces solo copiaré y pegaré este controlador de canasta y lo llamaremos controlador de checkout. Una de esas cosas está bien. Tendremos que traer algunas cosas nuevas también. Del paquete de formulario debe ser de extensión tipo carbón. Traeré un montón de estos tipos fundados por ahora en textil necesario y el tipo de área de texto. Y luego necesitaremos algunos paquetes locales también. Por lo que necesitamos traer a la entidad de Orden que acabamos de crear. Y el repositorio de productos también. Usamos siempre más abajo. Por lo que tendremos nuestra grosería un checkout slash también. Y de hecho, eso servirá por ahora. Podemos volver a conseguir una canasta como antes. Y vamos a trabajar también. Entonces vamos a mover ese código hasta el y podemos seguir adelante y crear un nuevo orden entidades para que C y C acabamos de crear. Y luego vamos a usar esto para crear un formulario usando sinfonías biblioteca de formularios. Entonces vamos a llamar al constructor de formularios. Y esto va a crear una forma alrededor de los n estados. Se va a utilizar eso como base para que pueda agregar validación y entender lo que está pasando. Y entonces podemos sumarle nuestros fracasos. Entonces vamos a añadir un nombre. Voy a añadir una dirección de correo electrónico, la dirección postal. Y éste va a ser un tipo de área de texto. Y luego vamos a añadir un botón de guardar. Y podemos darle a esto una etiqueta que diga confirmar orden, llamar, obtener forma. Y luego finalmente aquí abajo, hacemos que ese chef cuente aquí en la canasta. Siguen queriendo un total. De acuerdo, entonces hablemos a través del código que hemos implementado aquí. Tan grande lo hace entidad Nuevo Orden. Y lo hemos utilizado como base para nuestra forma. Y luego dijimos: OK, crear estas fábulas de forma y nombre y correo electrónico y dirección. Y estos son los tipos que queremos. Y luego agregamos el botón de enviar. Se llama la salvada aquí. Y hemos dado una etiqueta. Y luego una vez que tengamos listo este formulario, vamos a crear una versión HTML de veterinario. Todo esto es proporcionado por sinfonías Form Component y lo vamos a enviar a esta plantilla de checkout que vamos a crear en la siguiente lección. 50. Plantilla de verificación: Y hemos creado nuestro checkout con nuestro formulario. Entonces sigamos adelante y creamos la plantilla. Simplemente usa canasta como base, pero podemos deshacernos de la mayor parte. Simplemente guarda como checkout en HTML, ramita. Vamos a deshacernos de toda esta zanahoria de aquí. Entonces usaré de nuevo ese ayudante de formato de número bajo aquí. Y luego cortar la espuma va a ser súper sencillo. Vamos a llamar al ayudante de formulario y voy a pasar en el formulario. Entonces en el controlador de checkout, lo llamamos forma aquí. Podríamos haber llamado a esta forma 123. Y entonces sólo ponemos aquí la forma 123. Pero como lo acabamos de llamar forma, ligeramente confusamente a llamar a método con la variable de forma. Pero eso es en realidad todo lo que necesitamos hacer. Entonces vamos a golpear, vamos a proceder. Botón de checkout que atiende para cortar la caja y ver qué sucede. Entonces tenemos un error en solucionar eso en la siguiente lección. 51. Prueba de la compra: Tenemos una cosa diminuta que aclarar aquí, y eso es lo que vamos a la entidad. El espacio de nombres debe ser colecciones en lugar de colección. Refresca eso ahora, ok, perfecto. Por lo que todo esto ha sido construido por arte de magia por Sinfonía para nosotros. Entonces recuerda que todo lo que hicimos fue en el controlador. Dijimos, queremos crear a partir de esto entretenido y estos fracasaron. Y sinfonías adelante y crear etiquetas y los campos, bosques y configurados todos nosotros fallamos, por lo que tratamos de presentarlo. Ya tiene la validación HTML básica en E y F, aquí rellenamos algunos valores y lo presentamos. No va a pasar nada porque aún no hemos agregado ningún manejo para ello. Pero ya fuera de la caja, tenemos toda la forma HTML construida para nosotros. Y con fluidez a la fecha el formulario o tendríamos que hacer es ir actualizar la entidad en el controlador y todo el HTML, todos los widgets actualizan mágicamente bosque. 52. Procesado de el pedido: Ahora que tenemos un formulario creado, agreguemos algo de procesamiento para ello. Y el primer paso es realmente CB fácil. Podemos decir solo solicitud, una solicitud de manejo. No tiene ningún sentido tal preforma, voy a decir solicitud de manejo de formulario. Y eso le va a decir a un formulario que tome la solicitud entrante y lo mapee sobre el formulario. Entonces, sólo volvamos a filosofar y a mostrar lo que pasa. Ahora si lo someto. Salvará todos mis valores. Agradable. Porque cuando entra la solicitud, mapea todo aquí. Porque todavía no pasa nada realmente porque no hemos manejado la sumisión. Entonces, agreguemos eso. Entonces digamos si se presenta y es sólo hacer esto si el formulario es válido también. En primer lugar, vamos a actualizar esta entidad Order porque hasta este punto, hemos guardado todos los valores que guardó. Habían sido guardados en esta forma. Pero en realidad no son entidad mayor. Pero si llamamos a esto obtener datos y vender orden, eso actualizará el pedido que tenemos aquí con el nombre, dirección de correo electrónico, dirección. Y lo siguiente que tenemos que hacer es añadir los productos a la canasta. Entonces vamos a llamar a ese obtener productos que llama a la colección de array en el pedido. Y voy a hablar contigo. Y entonces, ¿qué está pasando aquí? Bueno, estamos dando un bucle a través de la canasta y consiguiendo cada producto. Y nosotros usando ese ID de producto para encontrar aquí la entidad en la base de datos. Y luego estamos agregando esa entidad al array de productos en el pedido. Entonces si tuviéramos bicicletas gratis y nuestra canasta, pasaría por el medidor de canasta o el GET AID gratis. Encuentra la entidad y agrega n. ¿Podríamos tomar porque almacenamos la moto en una sesión, podríamos simplemente añadirla directamente a la colección array sabrá, porque si hiciéramos eso, pensaría que era una entidad separada. Entonces cuando lo estoy agregando aquí, tenemos que ir a buscar de la base de datos otra vez. Entonces esa doctrina sabe que aquí no estamos creando una nueva bicicleta. Se trata de una bicicleta existente en la base de datos que quiere estar apegada a este orden. Entonces una vez que hemos hecho eso, entonces construimos toda una entidad de Orden. Y ahora solo queremos guardar esto en la base de datos. Y la forma en que hacemos esto es que necesitamos conseguir al gestor de la entidad, lo cual podemos hacer con eso. Y entonces vamos a decir persistir, lo que significa guardar la auditoría en la base de datos. Y luego necesitamos una llamada final, que es a ras, que dice doctrina que arruine todo el SQL. Tiene buffered. Entonces si vas a escribir múltiples entidades en la base de datos, podrías llamar persistir en un montón de diferentes, y entonces ninguna de ellas realmente se escribiría hasta que llames a este método de descarga. Entonces tienes que hacer eso manualmente para decir, OK, ahora escribe esto a la base de datos. Y la razón es sólo para la eficiencia por la doctrina de los aliados, si estás tratando de agregar cinco cosas, doctrina iría a la base de datos cinco veces. Y mucho más eficiente para que digas doctrina cuando quieres que vaya y escriba a la base de datos. Entonces ahora que tenemos y lo guardamos, podemos devolver una plantilla separada. Y sigamos adelante y creemos esa plantilla también. Entonces solo queremos una cabeza súper simple solo dice, felicitaciones o no. Entonces eso es solo guardar. Esto tiene punto de confirmación HTML, ramita. Y yo solo diré algo como nos veíamos. Hechizo mal y vuelve atrás y arregla eso en un minuto. Sí. Está bien, bien. Ahora y volvamos a esta página. ¿ Y qué va a pasar cuando sometamos esto? Va a haber una época. ¿ Puedes adivinar por qué? Está bien, perfecto. Entonces tenemos un error aquí porque esta tabla en realidad no existe. Creamos la entidad que no hemos creado en la base de datos. Entonces vamos a hacer eso en la siguiente lección. 53. Migración de la tabla de pedidos: Y como era de esperar, obtuvimos este error porque aún no hemos creado la tabla de la base de datos. Entonces sigamos adelante y hagamos eso. De la misma manera que lo hacíamos antes. Vamos a ejecutar PHP sido dashed consola. Hacer la migración junto a la de los creadores. Un segundo archivo de migración. Sí, así que va a crear son estas tablas de li. Y luego para ejecutar esa doctrina, migraciones de colon, colon migran. Agradable. Si vamos a ver la base de datos ahora, diremos que tenemos nuestra tabla más antigua. Y porque la doctrina está manejando la relación entre los pedidos y los productos. Entonces equiparemos esta tabla de productos de pedidos con un vínculo entre los dos. Pero no necesitamos preocuparnos por esa doctrina maneja a todos los extranjeros. Probemos y presentemos nuestro pedido. Aún así tenemos nuestra pantalla de confirmación así de genial. Y aquí está nuestra orden. Así que van son más viejos y en orden los productos. Podemos ver que está ligada a las dos bicicletas que tenemos ahí también. Entonces eso es perfecto. Tan solo un par de tareas de limpieza para hacer eso nos encargaremos en la siguiente lección. 54. Enrollado de checkout: Lo último que queremos hacer aquí es despejar la canasta hacia abajo porque a pesar de que hemos presentado la olga, realidad todo todavía en la canasta. Por lo que realmente podemos hacer eso fácilmente. Y controlador de checkout una vez que se haya presentado el más antiguo. Y ya trajimos sesión y aquí arriba así que sólo podemos decir la canasta de conjunto de sesiones. Y pudimos simplemente desconfigurarlo, romperlo también simplemente ponerlo en una matriz vacía. Y así ahora si volvemos a pasar por el proceso de checkout, perfecto. Por lo que se ha presentado la orden. Tenemos una nueva fila en nuestra base de datos de pedidos y despejó Dan una sesión por lo que las motos y ya no en la canasta. 55. Por Por correo electrónico y las capas de transporte y transporte: En este módulo, vamos a mirar el envío de correo electrónico en sinfonía. Pero antes de que hagamos eso, solo quiero meterme en esta idea de usar una capa de transporte y ser realmente claro en cuanto a qué es eso. Entonces las bibliotecas de transporte realmente que va a enviar el correo electrónico. Entonces si piensas en el correo sinfónico, un componente que es como tu cliente de correo electrónico. Al igual que podrías tener Outlook o Thunderbird o un cliente basado en la web como correos electrónicos G, interfaz web, o tal vez la aplicación de correo en tu teléfono. Pero eso no es hacer el envío real de los correos electrónicos. Necesitas tener algún tipo de cuenta de correo electrónico. Y el software simplemente interactúa con esa cuenta de correo electrónico. Y es lo mismo con el mailer sinfónico es que eso va a interactuar con lo que realmente está enviando los correos electrónicos. Y hay un montón de opciones que podemos hacer eso. Simplemente podemos usar una cuenta de correo estándar o podemos usar lo que se llama un servicio de correo electrónico transaccional. Entonces esto es algo así como una API a la que nos conectamos y decimos, vale, enviamos este correo electrónico a esta persona. Y se llama transaccional porque tiendes a enviarlos uno a la vez comparado con decir, una lista de correo donde saldrías y dirías, vale, quiero mandar este correo electrónico a todas estas personas. Transaccional tiende a inscribir uno a la vez usando una API. Ahora, en cuanto a conseguir el correo electrónico a la persona, correo electrónico no es un sistema perfecto y algunos se pierden, algún spam independiente. Y en general así que la razón por la que podrías pagar más por un servicio de correo electrónico transaccional en lugar de solo usar tu cuenta de correo electrónico es que podría ser mejor y evitar el spam. O podría ser peor. Es bueno probar estas cosas porque él nunca realmente no lo sabe. Tenemos un montón de opciones de capas de transporte en sinfonía. Viene con, por defecto solo obtendrá SMTP. Por lo que esta es la forma normal que configurarías un cliente de correo es ir a tu cuenta de correo electrónico, obtener los ajustes y te dará un nombre de usuario y una contraseña y probablemente un servidor IMAP y SMTP al que conectarte. Y también puedes usar Gmail. Gmail ligeramente diferente, a pesar de que es solo una cuenta de correo regular. Hay una biblioteca separada que proporciona siete días si quieres usar Gmail. Y luego hay un montón de servicios de correo electrónico transaccional. Entonces cosas como correo, armas, Enviar grilla, matasellos. AWS de Amazon tiene sus propios costos de servicio de correo electrónico, simplemente servicio de correo y chimpancé masculino también. Ahora tenemos chimpancé masculino, estamos hablando específicamente de mandril. Por lo que podría tener un chimpancé masculino y ese boletines a su lista de correo. Pero hay un servicio de correo electrónico transaccional adicional llamado mandrill que cuesta dinero extra que también puedes agregar a tu cuenta. Por lo que no es lo de la lista de correo electrónico de chimpancé regular, es el servicio adicional de mandril que brindan. Todos ellos son buenos. Me gusta mucho clavo arma persona ellos pero si sí quieres ir por el servicio de correo electrónico de transacción, entonces solo haz un poco de investigación y ve cuál funciona para ti. O simplemente puedes usar una cuenta de correo regular como vamos a hacer en este ejemplo. 56. Instalar el paquete de correo electrónico: Para poder enviar correos electrónicos, necesitamos instalar el paquete de correo. Entonces sigamos adelante y hagamos eso. Simplemente haremos compositor requerir slash sinfónico Mila. Damos a eso un minuto para hacerse cargo de eso. Derribaré la biblioteca media y luego podremos llegar a trabajar usándola y personalizándola e implementándola. Está bien, perfecto. Estamos listos para enviar correos electrónicos. 57. Configurar el servicio de correo electrónico: Vamos a seguir adelante y configurar el servicio de correo electrónico. Entonces vamos a entrar en nuestro archivo y luego tenemos a este mailer, el sol aquí. Y la forma de esto dependerá de qué capa de transporte usando, en este caso, solo estamos usando el servidor SMTP básico. Por lo que necesitarás tus detalles SMTP discutidos, estilo un módulo. O podría utilizar un servicio diferente si lo desea. Y toma la forma de contraseña de usuario. Y luego los detalles SMTP y el puerto. Ahora voy a seguir adelante y a intercambiar estos por mis detalles reales. Pero obviamente quieres poner tus datos personales aquí en su lugar. 58. Enviar un correo electrónico de confirmación: Ahora que hemos configurado el servicio de correo electrónico, sigamos adelante y actualicemos la caja para usarlo. Entonces vamos a necesitar traer aún más clases aquí. En la interfaz de correo. Vamos a traer también la integración de ramitas porque queremos que sea agradable y la plantilla. Y luego usemos el cableado de sinfonías para traer el continente. Y entonces así vamos a despejar la canasta justo antes de hacer esto. Vamos a llamar a la confirmación de envío de correo electrónico. Y voy a pasar en el orden. Y la mielina. Ahora vamos a funcionar y estamos a punto de bajar y crearlo. Entonces vamos a hacer eso ahora. Es una función privada porque nos encontramos con llamarlo desde aquí. Y lo llamamos enviar confirmación por correo electrónico. Puede tomar un pedido. Y una interfaz de mailer. Diga, Nuevo. Empieza a configurar esto desde enviarlo desde mi dominio. Y vamos a dos, y vamos a usar esto una función de vestido. Y compramos y pudimos simplemente poner la dirección de correo electrónico ahí como una cadena. Pero esto será mejor porque también podemos dar el nombre. Entonces sacaremos el correo electrónico. Conseguiremos el nombre también. Asunto. Diré confirmación más antigua. Y yo soy porque hoy estamos usando una plantilla. Ahora, pasaremos esa lista. Correo electrónico tal orden dot HTML ramita de nuevo no existe. Y entonces el contexto siempre pasa en una ramita variables. Entonces justo más viejo ahí dentro. Y eso está hecho. Y entonces aquí voy a decir mi, vamos a enviar este correo electrónico. De acuerdo, así que esa es la primera parte que se hace. Vamos a crear la plantilla de correo electrónico en la siguiente lección. 59. Plantilla de correo electrónico: Ahora tenemos nuestro mal funcionamiento de Sandy. Vamos a seguir adelante y crear una plantilla. Y esta vez no vamos a extendernos porque es un correo electrónico. Vamos a guardar esto como se ordenó, nuestra ramita HTML. Y colocamos en un directorio y fue e-mails y línea de sésamo, gracias por su pedido. Y luego los podemos enumerar. Mano abajo dirá que vamos a confirmar. Se ha despachado el pedido. Jose para el agua en todos los productos. Diga por objeto dopamina. Está bien. Eso se ve bien. Bastante simple, bastante básico. Pero formará una confirmación de pedido con el ID de pedido y enumerará los productos que compraron de nuevo a ellos. Genial, así que vamos a probar esto en la siguiente lección. 60. Prueba de la confirmación de correo electrónico: Hemos configurado todos los servicios y entornos para el correo electrónico. Entonces sigamos adelante y probemos eso. En primer lugar, solo agreguemos un par de bicicletas a nuestra cesta. Ahí vamos. Genial con Godfrey bicis ahora canasta en una compra que llenaría mis datos. Y vamos a confirmar las solicitudes de pedidos no es super snappy cuz va a hablar con el servicio de correo electrónico. O si estuvieras haciendo esto en un gran proyecto comercial, lo harías de manera asíncrona, pero pongo un email en cola y que alguien se ocupe de eso más tarde, pero esto funciona bien por ahora. Tenemos una confirmación. Gracias por Shaphan fue y si abro mis correos electrónicos, ahora bien, es toda la conformación o el número siete y tiene las motos. Yo también he levantado eso. Entonces Alex, perfecto. Ahora puede ser el caso si este correo electrónico no aparece en tu bandeja de entrada de inmediato, necesitas bajar a tu carpeta de spam y echar un vistazo a su correo electrónico. Git's tiene, la mayoría de la gente lo sabrá, supongo que no eres muy confiable en estos días porque la protección contra spam del mapa, y sobre todo si no consigues que el email configurado realmente bien y realmente genuino proveedor, entonces tú podría quedar atrapado en un filtro de spam. Y la forma en que están evitados ES simplemente burlarse de él duro, proveedor de correo caro lamentablemente. Pero ojalá debería poder encontrar este correo en algún lugar y ver al mailer funcionando. 61. Reflexiones finales: Enhorabuena por llegar al final de esta clase. Si has estado codificando, habrás construido tu primera tienda sinfónica de comercio electrónico y ahora sabes cómo funcionaba la sinfonía y me encantaría que compartieras tu código completado con la clase. Buena suerte y feliz en desarrollo.