Vamos a crear la BD colegio que va a tener la tabla Alumno
En el fichero .env
Migraciones
Creamos la migración de la tabla
Si queremos hacer la migración y el modelo a la vez ( tened en cuenta que se va a crear siguiendo las convenciones de laravel: nombre del modelo.- en nuestro caso será Alumno y la tabla asociada a ese modelo sera alumnos)
Vamos a las migraciones, donde se ha creado una nueva para alumnos (la tabla es alumnos)
Que contiene
una clave de identificación (por defecto autoincrementable)
dos columnas ( created_at y updated_at ) creadas por el método de marcas de tiempo .
Vamos a modificar la tabla con los campos que queremos
Para ejecutar la migración creada
En la BD
La tabla alumnos
Seeder Alumno
Añadimos la referencia de la clase Alumno:
Creamos la variable $alumno, llenamos sus propiedades y finalmente utilizamos el método save(); igualmente llenamos con tres registros nuestra tabla alumnos.
Cuando ejecutamos los Seeders desde Artisan, este llama a la única clase que es DatabaseSeeder. Por lo tanto para ejecutar los demás Seeders creados debemos instanciar a esta clase con el método call().
Ejecutar Seeders
Ya podemos cargar de datos la tabla de nuestra base de datos Ejecutamos la siguiente línea de código que llenará las tablas con datos.
Para verificar los cambios en la base de datos, me voy a lo que es phpMyAdmin desde mi navegador, actualizo la página, abrimos la tabla y podemos verificar que los datos que definimos en los Seeders se encuentran cargados.
En la BD la tabla alumnos
Factories en Laravel
Con los Seeders que nos proporciona Laravel ya podemos llenar la tablas de nuestra base de datos. Sin embargo, es limitado ya que, si queremos llenar más de 10, 100 registros sería prácticamente un ejerció en sufrimiento. Porque se crea una variable por cada registro de la tabla.
Por esta razón Laravel cuenta con los Factories que es otra forma de llenar los datos de una forma más automatizada, y generar gran cantidad de datos.
Los Factories son sencillos de utilizar, solo se debe especificar en cada campo de la tabla que tipo de dato se quiere llenar, posteriormente la cantidad de registros que se quiere generar en la tabla.
Factory Alumnos
Ahora lo primero que aremos es crear nuestra clase AlumnoFactory con Artisan escribimos la siguiente línea de código.
Crea AlumnoFactory.com
Modificamos
Y cambiamos en el DatabaseSeeder
Ejecutamos seeders
Modelo
Si solo hacemos el modelo
Si usamos el modelo con –a (para que cree modelo, migración, seeder, Factory y controlador resource
Con la instrucción utilizada en el ejercicio
Ha creado el modelo Alumno
Con el código:
Registramos las configuraciones de la tabla Alumnos.
Lo modificamos
Si es necesario podemos hacer public $timestamps = false;
Podemos crear funciones . Ejemplo
La función “Obteneralumnos” utiliza el método all() para obtener todo el listado de los alumnos de la tabla.
La función “ObtenerAlumnoPorId” utiliza el método find() pasando un parámetro Id para obtener a un determinado alumno.
que podrían estar en el modelo
Controladores
Crear Controlador alumnos
Si queremos que se creen todas las funciones necesarias para un CRUD
Se creará todos los métodos que necesitamos
Lo primero que haremos es llamar a la referencia del modeloAlumno .
Dentro de la función index escribimos la siguiente consulta.
De igual forma obtendremos todos los datos de la tabla alumnos. Seguidamente, retornaremos en la variable $alumnos a la vista alumnos.
Seguidamente, vamos a crear la ruta, trabajaremos con el archivo web.php que se encuentra en el directorio routes.
En primer lugar, se debe hacer referencia al controlador:
En segundo lugar, crearemos las rutas de tipo get que harán la referencia al método index de nuestro controlador. Por último, le asignamos un nombre a nuestra ruta.
Plantillas Blade
Crear vista alumnos
Crear la carpeta alumnos y dentro de este creamos el archivo index.blade.php , introducimos el código de la vista alumnos finalizar también añadimos el código css para mejorar un poco el diseño de la vista.
Si vamos a http://localhost/nombreproyecto/public/alumnos nos muestra el resultado
laravel para paginar utiliza el Tailwind CSS y debes cambiarlo a Bootstrap, para esto utiliza el comando
Y luego puedes personalizar las vistas generadas en resources/views/vendor/pagination/ o cambiar la vista por defecto a una que prefieras de Bootstrap en tu vista seria así:
Nota :Versión 9
Bootstrap 5 Pagination Views
Laravel ahora incluye vistas de paginación creadas con Bootstrap 5. Para usar estas vistas en lugar de las vistas predeterminadas de Tailwind, puede llamar al método useBootstrapFive del paginador dentro del método boot de su clase App\Providers\AppServiceProvider:
Método create y store
Vamos con los métodos de create() y store() del controlador AlumnoController.
En el método create() escribimos el siguiente código:
En el método store() el siguiente código:
Rutas web (create y store)
Ahora crearemos las rutas de tipo de create() y store() que harán la referencia al método get() y post() de nuestro controlador.
Primero abrimos nuestro archivo web.php, las funciones get() y post() se encargaran de realizar las peticiones a los métodos de nuestro controlador Alumno.
Formularios Blade (crear alumno)
Ahora crearemos los formularios en las vistas, utilizaremos las plantillas Blade que te ofrece Laravel.
Para la navegabilidad entre ventanas en los archivos index de Alumnos y añadiremos un enlace que cuando hagamos clic redireccione al formulario de crear, en mi caso yo le colocaré antes del título de la vista.
Quedando
Formulario crear Alumnos
Laravel te exige un @csrf Token con el propósito de prevenir posibles ataques a las peticiones solicitadas en formularios HTML.
Realizamos los mismos pasos al crear el formulario de la vista alumnos. Primero creamos el archivo crear.blade.php en la ruta resources/views/alumnos y escribimos el siguiente código:
vamos a poner el css de momento en la misma vista
nos quedará
Método edit y update
En el método edit() del controlador AlumnoController haremos lo siguiente. Primeramente, con el método findOrFail($id) recuperamos un determinado registro con un identificador $Id que le pasamos como parámetro, seguidamente retornaremos a nuestra vista del formulario alumno con el variable $alumno
En el método Edit() introducimos el siguiente código:
En el método update() el siguiente código:
Rutas para actualizar (edit y update)
Ahora crearemos las rutas para actualizar registros de nuestra base de datos, similar como lo realizamos al crear un nuevo registro.
En el archivo web.php utilizaremos las funciones get() y put() escribimos el siguiente código:
Formulario Actualizar(edit y update)
Para actualizar los datos de las tablas de nuestra base de datos. Primeramente, agregamos la navegabilidad en nuestras vistas del listado Alumnos.
En el archivo index de la vista alumnos, en la cabecera de la tabla añadimos el siguiente código:
Dentro del bucle foreach lo siguiente:
Formulario actualizar alumnos
En el formulario de edición de alumnos realizamos los mismo pasos. De igual forma, crearemos el archivo editar.blade.php en el directorio resources/views/alumnos, y escribimos el siguiente código:
Ponemos css
Validar formularios
Laravel ya viene integrado funciones que podemos utilizar para validar nuestros formularios antes de guardar en nuestra base de datos.
Antes de crear nuestras validaciones, primero abriremos las migraciones creadas anteriormente. Por ello, verificaremos en los campos el tipo de dato si es entero, cadena o fecha, seguidamente observamos que campos son obligatorios y que campos son opcionales.
Ahora abriremos nuestro controlador AlumnoController, en el método store() es donde se controlan los errores de validación de nuestro formulario, es aquí donde añadiremos código a las validaciones, antes de crear una nueva instancia de alumnos.
Utilizaremos la variable request que es pasado como parámetro de la función store que contiene todos los campos del formulario, al método validate() le pasamos un array con los campos del formulario y sus validaciones respectivas.
Laravel nos indica en caso de que algunas de las validaciones realizadas no cumplen con la condición retorna a la vista un error de validación y no pasa a la siguiente línea de código del programa. Sin embargo, si todas las validación hechas se cumplen entonces pasa a la siguiente línea de código, en nuestros ejemplo crea la nueva instancia alumno, carga los datos y posteriormente guarda los datos en nuestra base de datos.
Ahora pasamos a la vista de nuestros formularios, es aquí donde vamos a imprimir mensajes en los campos del formulario cuando existan errores de validación que definimos en nuestros controladores.
Antes de comenzar con la validación de los formularios añadiremos código css a todas nuestras vistas, con el fin de dar estilo a los mensajes de error.
Validación del formulario en la vista alumnos
Empecemos a validar el formulario alumnos, abrimos el archivo crear.blade.php que se encuentra en la ruta resources/views/alumnos, donde iremos integrando todas nuestras validaciones.
En el campo Nombre y Apellidos por debajo del elemento input añadimos el código de validación de este campo con la directiva que nos ofrece Blade, @error nos permite imprimir el mensaje de error que corresponde a este campo.
Ahora vamos a añadir el método old() (Es una directiva de Blade) en las etiquetas input de nuestro formulario, este método lo que hace es mantener en los campos el texto escrito por el usuario en caso de error de validación en uno de ellos.
Ahora en el campo edad añadimos las validaciones.
Igualmente, el método old() a la etiqueta input del campo edad
En el campo teléfono escribiremos lo siguiente:
En el campo dirección escribiremos lo siguiente:
Traducir al español los mensajes de validación en Laravel
Si observamos al momento de probar nuestro código los mensajes de error de validación en los formularios están en inglés, debido a que la configuración de Laravel viene por defecto en inglés.
Para poder configurar nuestra aplicación en español tenemos que realizar los siguiente:
Primeramente en la ruta lang creamos una carpeta llamada es, ahora copiamos todos los archivos que se encuentran en la carpeta en y lo pegamos en la carpeta creada es.
La comunidad de Laravel ya cuenta con un repositorio en esta
Por último debemos indicar a Laravel que utilizaremos las configuración de lenguaje en español, en la carpeta config abrimos el archivo app.php, buscamos la siguiente línea de código ‘locale’ => ‘es’ y reemplazamos es por en.
Cambiamos y queda
Actualizamos nuestro navegador y probamos las validaciones con la nueva configuración, todos los mensajes por defecto estarán ahora en español.
Traducción de variables en Laravel
Ya solucionamos parte de los mensajes de error de validaciones, si observamos con más detalle los mensajes de error, El campo nombre apellido es obligatorio y lo correcto debe ser El campo Nombre y Apellido es obligatorio.
Este caso nos ocurrirá bastante si las variables que declaremos estén en inglés que generalmente se declaran de esta manera, para solucionar este problema nos dirigimos al directorio creado que está en resources/lang/en abrimos el archivo validation.php y dentro de la variable attributes declaramos las variables de nuestro formulario que queremos corregir.
modificamos:
Queda
Visualizar registros (show)
Cuando necesitamos ver una gran cantidad de información de un registro en específico nos viene muy bien tener una ventana independiente donde poder visualizar todos estos datos.
Método ver en controlador alumnos
Iniciamos abriendo el controlador AlumnoController, dentro del método show() iniciamos una variable $alumno que obtendrá un objeto de tipo Alumno, al método findOrFail le pasamos un parámetro Id para recuperar un registro en particular, finalmente retornamos a la vista ver el alumno con los datos recuperados.
Ruta web de la vista ver
Vista Blade show
Finalmente pasamos a las vistas de visualización de datos de un determinado registro de nuestra base de datos, para la navegabilidad entre ventanas en los archivos index
En el archivo index de la vista alumnos igual añadimos el siguiente código:
Formulario ver alumnos
En la ruta resources/views/alumnos creamos un nuevo archivo ver.blade.php y dentro definimos la vista ver donde visualizamos todos los datos de un registro en específico.
Método destroy
Abrimos el controlador AlumnoController, dentro del método destroy() , llamó al método delete() del objeto $profesor para eliminar el registro de nuestra base de datos.
Ruta web de la vista eliminar
Eliminar registros en Laravel
Finalmente pasamos a la funcionalidad de eliminar, utilizaremos la vista ver creada anteriormente donde iremos añadiendo código que nos permita eliminar un registro seleccionado con algunos controles y validaciones que se tiene que tomar en cuenta.
En el caso tener mas tablas tendremos que realizar las validaciones que tomaremos en cuenta que son por ejemplo un alumno no puede ser eliminado si está inscrito en uno o varios cursos.
Vista eliminar alumnos
En el archivo index.blade.php de la ruta resources/views/alumnos
Vamos a ponerlo en orden todas las opciones
También puedo poner
y voy a meter el css en el fichero style.css que esta en resources/css
y utilizo bootstrap para usar en enlaces y botones
Confirmar borrado o cancelar
Vamos a cambiar el borrado de nuestro alumno, realizando la confirmación de la baja.
Modificamos el index , poniendo al formulario como comentario
Empezamos poniendo una ruta para esa confirmación
En el controlador creamos nuevo método
y modificamos
que sera
Nos falta la vista confirmar
Nos falta la ruta cancelar, que puede ser ( he creado una ruta para cancelar, pero podriamos mandarla directamente an index)
podemos tener dos aviso:
Cuando borra correctamente al alumno
o si lo cancela
Para que muestre los mensajes cambiar en el index
Rutas resource y controlador
Si en este momento web.php tiene las siguientes rutas que hemos creado para hacer un crud de nuestra tabla alumnos
Cada una de estas rutas nos manda al método correspondiente en el controlador AlumnoController.
También podemos ver las rutas mediante el comando artisan
Podemos cambiar todas estas rutas por las que nos da la siguiente
Podemos comprobar que nuestro sitio sigue funcionando como antes
Esto se hace cuando al crear el controlador hemos creado todas las rutas necesarias para hacer el CRUD de la tabla
Variaciones
Cuando creamos el Controlador
Me crea algunos de los métodos pasando el modelo, en vez de el Request
El controlador quedaria
Middleware
Para crear un nuevo middleware, use el make:middleware comando Artisan:
Este comando colocará una nueva DomingoMiddleware clase dentro de su app/Http/Middlewaredirectorio.Nuestro middleware s se encargará de hacer cosas cuando detecte que el día actual es un domingo. Ese comando de artisan genera un middleware básico en el que solo tenemos un método. En este middleware, sse encargará de hacer cosas cuando detecte que el día actual es un domingo
Ponemos:
Quedando
Sobre el código anterior queremos que te fijes en el método handle(), que es el que se ejecutará cuando se ponga en marcha este middleware. Con el if se comprueba si el día de la semana actual es domingo, realizando dos acciones distintas si era o no era ese día de la semana.
Registrar el middleware de manera global
Ahora vamos a registrar el middleware para ver cómo se ejecuta en el sistema. Empezaremos registrando en modo global, para que se ejecute en todas y cada una de las solicitudes que atienda nuestra aplicación.
Esto es muy sencillo , se hace desde el archivo Kernel.php que está en la ruta app/Http/Kernel.php.
Hay una propiedad de la clase Kernel donde se coloca toda la lista de middleware a ejecutar de manera global;
Como puedes ver, es un array en el que debemos indicar el listado de los middleware a ejecutar en cada solicitud, en el orden en el que van a ser invocados. Nosotros hemos agregado el middleware creado anteriormente en el último elemento de la lista, pero si necesitase mayor prioridad sería solo ponerlo antes en el array.
Una vez registrado el middleware de manera global podrías entrar en cualquier página de la aplicación y debería verse la salida del middleware, informando si es o no domingo.
Registrar el middleware para una ruta determinada o un controlador
Hay varias maneras de hacer este paso, desde el sistema de rutas o incluso desde los controladores, pero siempre debemos comenzar por asignar un nombre a nuestro middleware en el archivo Kernel.php. Allí, en la clase Kernel, hay una segunda propiedad llamada $routeMiddleware, donde tenemos un array asociativo con los middlewares que deseemos usar en las rutas.
Cada elemento del array tiene un índice y ese índice será el nombre que le demos al middleware para referirnos a él desde el sistema de routing.
Ahora podemos ejecutar el middleware a través del índice que le hemos dado en el array anterior. Lo veremos hacer mediante tres alternativas distintas:
Desde el sistema de routing, al definir la ruta, podemos indicar un middleware que queremos usar. Esto lo tenemos que hacer desde el registro de rutas, realizado en el archivo routes.php, mediante una sintaxis como la que puedes ver a continuación.
2. También desde el sistema de routing podemos generar un grupo de rutas donde se ejecute este middleware.
Así hemos indicado dos rutas donde se ejecutará ese middleware etiquetado como "domingo".
3. Desde un controlador también podemos llamar a un middleware. Lo podemos hacer desde el constructor, por lo que ese middleware afectará a todas las acciones dentro del controlador.
En este caso no necesitamos mencionar el middleware desde el sistema de rutas, solo lo mencionamos desde el constructor del controlador, para ejecutarse en cualquiera de las acciones declaradas en él.
Encadenar un middleware con el siguiente
Según la filosofía de los middlewares en Laravel,pueden existir varios que se ejecuten en cadena, uno detrás de otro, para cada solicitud. Por ello tenemos que asegurarnos que este encadenamiento se pueda producir. Realmente este trabajo nos lo dan ya hecho en el middleware que se genera con artisan, por lo que no debemos preocuparnos nosotros. Sin embargo queremos que se vea dónde se consigue ese procesamiento en cadena.
Echemos un vistazo al método handle() del middleware generado automáticamente:
Como se puede ver, en este método se devuelve con return una llamada a $next() pasándole $request como parámetro. Esa llamada es la que permite que se ejecute el siguiente middleware en la lista de middlewares globales y además enviarle la Request completa al siguiente middleware para que siga filtrándola.
Realmente no tenemos que hacer nada manualmente, porque Laravel ya le pasa en el método handle el $request y el $next como parámetro. Además, Laravel sabe si ese middleware es el último de la lista, en cuyo caso no debería haber otro encadenamiento. Simplemente sería asegurarse de dejar ese return que aparece de manera predeterminada, para que todo siga funcionando.
Blade es un poderoso motor de plantillas de Laravel que permite introducir código PHP en plantillas HTML de una manera sencilla y segura, permitiendo separar bloques de código que se pueden reutilizar en distintas vistas de tu aplicación.
Separar los estilos css de las vistas
Vamos a separar los estilos de todas nuestras vistas en un solo archivo; en el directorio public/ crearemos una carpeta llamada css y dentro de éste, un archivo llamado main.css.
Por último, reemplazamos el código css de todas las vistas por la ruta de nuestro archivo de estilos main.css. Colocamos una etiqueta link y con la palabra asset se especifica la ruta css/main.css
Crear menú en Blade
Crearemos un menú principal de navegabilidad con la finalidad de ir de una ventana a otra sin la necesidad de escribir la URL de cada ruta en el navegador.
Estilos css
Para dar estilo al menú principal, lo primero que deberemos hacer es copiar el código css en nuestro archivo main.css.
Crear menú principal en vistas
Ahora vamos a crear el menú en nuestras vistas, en el archivo index de la ruta resources/views/alumnos debajo de la apertura de la etiqueta body copiar el siguiente código:
Si no tienes creados todavía profesores y cursos
Este proceso lo repetiremos en todas nuestras vistas de profesores, alumnos y cursos. Seguidamente, abrimos nuestra aplicación en el navegador, donde ya podemos visualizar el menú principal.
Pero este código no es óptimo. Ya que, si queremos aumentar una opción a nuestro menú por ejemplo categorías de cursos, lo que se tendría que hacer es ir a todas nuestras vistas y modificar el menú de cada uno. Por esta razón, Laravel te ofrece herramientas como Blade para optimizar las vistas.
Layout Blade utilizando herencia de plantilla
Los diseños (layouts) se crean mediante herencia de plantillas que es uno de los beneficios que te ofrece Blade. Nuestras vistas mantienen el mismo diseño en todas sus páginas. Blade nos sugiere crear una plantilla principal (Master) de donde las demás vistas hereden sus características comunes.
Crear plantilla principal
Empecemos a optimizar nuestras vistas. En primer lugar, creamos un archivo master.blade.php en la carpeta layouts en ruta resources/views que será nuestra plantilla principal.
Seguidamente, será copiar todo el código de la vista index del controlador AlumnoController y pegar en el archivo master. Finalmente, borramos todo el código dentro de las etiquetas body menos el menú, De esta forma, la estructura quedaría algo así.
En el archivo master.blade.php colocaremos una directiva @yield(‘content’), la cual hace referencia al contenido de una sección determinada.
Optimizar las vistas
En la vista index lo que se hará es quitar todo el código de la parte de la cabecera y el menú, dejando solo la parte interna de la etiqueta body.
Recuerda que en el archivo master.blade.php utilizamos @yield para indicarle que aquí se inyectará contenido de una directiva @section con el nombre content. Por esta razón todo el código del archivo index se encierra con dicha directiva.
Por último, utilizaremos la directiva @extends para indicar que al archivo hereda las propiedades de la vista principal, esté directiva lo vamos a añadir en la cabecera del archivo index especificando el nombre del archivo padre.
Alumno
Crear.blade.php
editar.blade.php
Ver.blade.php
Confirmar.blade.php
Repetiremos este proceso con todas nuestras vistas de alumnos y curso. Al finalizar, realizamos las pruebas de la aplicación en el navegador.
Componentes y Slots en Blade
Los componentes y slots tienen las mismas funcionalidades que los layouts o secciones. Su aplicabilidad es más sencilla de entender, existen dos enfoques para escribir componentes:
Componentes basados en clases.
Componentes anónimos.
Componentes basados en clases
Realizaremos un ejemplo en nuestra aplicación utilizando componentes basados en clases. Si se observa el código de nuestras vistas, los títulos de las etiquetas h2.
Lo pasaremos a un componente llamado titulo que utilizaremos en todas nuestras vistas, esto con el fin de hacer los títulos más dinámico y variado .
Desde la consola de Artisan creamos el componente:
Esta línea de código creará dos archivos en nuestra aplicación una es una vista titulo.blade.php en la ruta resources/views/components.
En segundo lugar, una clase llamado titulo.php ubicada en la ruta app/View/Components
Componente de la vista
En el componente de la vista agregamos una etiqueta h2 que recibirá dos variables, una será el nombre del título y otra el color del título.
Seguidamente, abrimos el archivo titulo que se encuentra en la ruta app/View/Components, en el cual se definen dos variables: $titulo y $color, en el constructor aplicamos inyección de dependencias a dichas variables.
Por último, en nuestras vistas reemplazamos la etiqueta del título h2 por el nuevo componente. El componente es declarado con una etiqueta que comienza por x-nombreDelComponente, donde le pasaremos dos parámetros, una es el título y otras es, el color del título.
Avisos
Realizaremos este proceso en todas nuestras vistas. De esta forma, lo que varia en cada vista será el nombre y el color del título.
En la vista index , tenemos una parte del código dedicada a la notificación cuando una acción ha tenido éxito, como borrar un alumno
vamos a crear el componente Aviso
Creamos una clase:
Y desde una vista:
Para la clase, proporcionamos este código:
Y para la vista:
La variable $mensaje recibirá lo que inyectaremos en el componente. Aquí está el código modificado en la vista index :
Tened en cuenta que no tenemos el bootstrap en la plantilla y por eso no sale en el color que le indicamos.
Las vistas generadas por Blade están en PHP y se almacenan en caché hasta que se modifican, lo que garantiza un buen rendimiento. El caché se encuentra aquí:
Si necesita limpiar este caché, no vale la pena ir a eliminar estos archivos en la carpeta, hay un comando de Artisan para eso:
La herencia
Hemos visto que una vista puede extender otra vista, es una herencia. Entonces, para las vistas de la aplicación, tenemos una plantilla básica:
que en nuestro ejercicio hemos llamado master y estaba en la carpeta layouts
En la plantilla, proporcionamos un lugar ( @yield ) para que las vistas secundarias puedan colocar su código:
include
Podemos hacer muchas cosas con la herencia, pero muchas veces es útil poder incluir una vista en otra, clásicamente hablamos de vista parcial (parcial).
Podemos poner el código que genera estas líneas en una vista parcial:
Al recuperar el código de la vista de índice :
Podemos por ejemplo crear una carpeta partials
y dejar el contenido de cada parte ahí. Por lo que nos podría quedar la plantilla main.blade.php
Los mensajes podrían ser una cosa asi, siempre que no los pongamos en componentes
Vamos a crear un formulario de contacto en Laravel 9 el cual puedes implementar en todos tus proyectos.
Crear el controlador del formulario de contacto escribe en la terminal:
Abre el archivo app/Http/Controllers/ContactFormController en cual solo usarás dos métodos, el método form que es el que mostrará el formulario de contacto y el método send que es el encargado de pasar los datos del formulario al Mailable que crearas en los siguientes pasos.
Crear ruta
Abre el archivo routes/web.php, y para que funcione tu formulario de contacto es necesario agregar dos rutas, una GET y otra POST:
y
Crear vista de formulario de contacto
Crea la carpeta resources/views/contact y dentro de ella crea el archivo form.blade.php en este archivo es donde agregarás el código del formulario de contacto:
Crear vista del email
Ahora tienes que crear la vista en donde se mostrará el email en donde van los datos del formulario de contacto. Crea la carpeta resources/views/email y dentro de ella crea el archivo contact-form.blade.php y agrega el siguiente código:
Crear y configurar Mailable
Ya casi terminas de crear un formulario de contacto en Laravel 9. Toca crear un Mailable, desde la terminal de comandos escribe:
Abre el archivo app/Mail/ContactForm.php, en este archivo las dos partes principales es método contruct() y el método build(). En el método construct() vas a pasar la variable con la información que quieres que se visualice en la vista del email; en el método build() se pueden pasar varios parámetros hacia la vista del email. Observa el código de abajo, cópialo y pégalo en tu archivo.
Configurar archivo .env
Para mandar emails desde Laravel 9 es necesario que en tu archivo .env tengas configurando algún cliente SMTP, cuando estás en producción puedes usar tu cuenta de Gmail, Yahoo, Outlook o si tienes un nombre de dominio puedes crear una cuenta especial de email para ello, la configuración la agregas en el archivo .env. Pero en este caso estoy trabajando en localhost por lo que usará el servicio de mailtrap.io.
Desde tu navegador abre el sitio web de mailtrap.io sino tienes cuenta crea una e ingresa a ella.
Ingresa al menú My Inbox y en Integration busca PHP y Laravel 7+:
Los datos que te muestra cópialos y guárdalos porque en los vas a necesitar:
Abre el archivo .env que esta en la raíz de tu proyecto localiza la sección en donde se colocan las variable de entorno referentes al envío de smtp y actualiza la información con las variables que copiaste anteriormente en Mailtrap:
Probar el formulario de contacto
Si veis que no funciona cambiar a 25 el el port ( ahora es 2525)
Teneis que ir a Mailtrap a comprobarlo manualmente
Modificar tabla alumnos introducir una foto alumno
Podemos modificar migración de alumnos, introduciendo un nuevo campo para la foto del alumno
Con esto tendríamos que volver a migrar la tabla cambiada y borraría los datos que ya tenemos.
Modificar migraciones
Al realizar una modificación en la migración original tenemos el problema de que los comandos reset y refresh eliminaran el contenido de las tablas en la base de datos. Para evitar esto podemos (utilizando el comando make:migration) crear una nueva migración y agregar desde ahí las modificaciones que necesitamos:
Acordaros de quitar el campo foto agregado y dejarlo como estaba al principio.
Vamos a modificar la migracion add_foto_to_alumnos
Dentro del método up()de la migración en lugar de usar el método create del facade Schema utilizaremos table y pasaremos como primer argumento el nombre de la tabla que queremos modificar:
Dentro de la función indicamos el campo que queremos agregar.
En el método down() especificamos la acción inversa, en este caso eliminar la columna que agregamos en el método up():
Con el método dropColumn eliminamos de la tabla la columna especificada como argumento.
Indicar la posición de una columna
Al modificar una migración utilizando Schema::table y agregar una columna, esta se va añadir al final de la tabla. Podemos lograr que la columna se cree en la posición que indiquemos utilizando el método after:
En este caso indicamos que queremos agregar la columna foto después del campo dirección.
Al realizar
nos creará el campo foto en la tabla alumnos en blanco
Si queremos que no salga en blanco, ponemos el nombre de una imagen por defecto en la migración.
que además la subiremos a una carpeta llamada imagenes en public.
Utilizando el comando de Artisan migrate:rollback Laravel regresará el último lote de migraciones ejecutado
Si miramos en nuestra base de datos la tabla migraciones, el campo batch
vemos que muestra un 2 , que indica el lote de migración a la que pertenece cada uno
En nuestro caso solo queremos que haga el 2
y volvemos hacer
Ahora tendremos las fotos de todos los alumnos con alumnoimagen.jpg
y la tabla migración
Ahora deberíamos modificar todo lo demás
Los seeders o en este caso no nos va hacer falta
pero podríamos utilizar un servicio de generador de imágenes online y almacenar en la base de datos el enlace.
Con lo que el seeder te quedaría asi
El uso del Str::random es para que cuando imprimas varios elementos con esa imagen no te salgan imágenes duplicadas por lo que deberás importarlo al seeder.
Hay bastante cantidad de imágenes y puedes especificar el tamaño que necesites para tu aplicación.