En la empresa de desarrollo de software Soluciones Digitales, Isabel y Laura son dos programadoras que se encuentran trabajando en el desarrollo de una nueva aplicación web para la gestión de una cadena de tiendas minoristas. La aplicación necesita incluir módulos para inventario, ventas, clientes e informes.
Con la idea de crear un código robusto, mantenible y reutilizable, Isabel sugiere utilizar Laravel, un popular framework web de PHP que conocen bien. Laura está de acuerdo, ya que sabe que Laravel tiene características de alto nivel que facilitarán su trabajo y mejorará la eficiencia de la aplicación web.
Laravel es un popular framework web basado en PHP que se utiliza para crear aplicaciones web robustas, dinámicas y escalables. Proporciona una estructura y conjunto de herramientas que permiten a los desarrolladores construir aplicaciones web de manera eficiente y rápida.
En la presente unidad se introducirá Laravel y se explorarán sus características, arquitectura y estructura de directorios. Además, se tratarán los elementos fundamentales de Laravel, como la gestión de rutas y controladores en este framework web, el uso de vistas mediante el sistema de plantillas Blade, la manipulación de bases de datos y migraciones y el uso de Eloquent. También se avanzará hacia aspectos más complejos, como la autenticación y validación en Laravel. Por último, se crearán aplicaciones web con Laravel paso a paso, desde la instalación inicial de este framework web hasta la gestión de relaciones en bases de datos y la autenticación de usuarios.
PHP es un lenguaje de programación de código abierto, utilizado principalmente para el desarrollo web. Permite la creación de sitios dinámicos e interactivos, con capacidad de conexión a bases de datos y generación de contenido dinámico.
Un framework web es un marco de trabajo que sirve como base para desarrollar aplicaciones web. Proporciona una estructura y un conjunto de herramientas y librerías predefinidas que facilitan y agilizan el desarrollo de una aplicación.
Los frameworks web ofrecen varias ventajas. En primer lugar, proporcionan estructura y coherencia al código, lo que facilita su mantenibilidad y expansión a lo largo del tiempo. En segundo lugar, reducen la cantidad de trabajo repetitivo al proporcionar una serie de funcionalidades predefinidas y probadas, como la gestión de sesiones, la autenticación de usuarios, la manipulación de formularios o la interacción con bases de datos. Por último, ofrecen medidas de seguridad integradas que ayudan a proteger las aplicaciones web contra vulnerabilidades comunes, como ataques de inyección de código, entre otros.
Ana y Juan son dos desarrolladores contratados por la agencia de viajes Destinos Soñados para crear un nuevo sistema de reserva en línea. A pesar de ser experimentados en programación, hasta el momento han trabajado principalmente con código personalizado y no han utilizado un framework web en su trabajo.
El nuevo sistema necesita combinar información de vuelos, hoteles y tours, además de manejar las reservas de los clientes y las transacciones de pago. Conscientes de la complejidad de este proyecto, Ana y Juan deciden que es el momento perfecto para aprender y utilizar un framework web que les ayude a manejar estos desafíos.
Han oído hablar mucho sobre Laravel, un popular framework web de PHP, y deciden que es hora de adentrarse en él y ver cómo pueden usarlo para su proyecto.
Laravel es un framework web robusto y versátil para el desarrollo de aplicaciones web en PHP. Está diseñado con una filosofía de ser amigable para el desarrollador, poniendo especial énfasis en la elegancia y simplicidad de la sintaxis. Su naturaleza de código abierto permite a los desarrolladores de todo el mundo colaborar y contribuir, lo que ha resultado en un ecosistema sólido y en constante crecimiento.
El equipo de Laravel describe su framework web como progresivo. Esto es porque si estás iniciándote en el desarrollo web, Laravel te proporciona una extensa documentación, guías y tutoriales en vídeo que facilitan el aprendizaje de este framework. Por otro lado, si eres un desarrollador sénior, Laravel te ofrece herramientas sólidas para inyección de dependencias, pruebas unitarias, colas, eventos en tiempo real y mucho más.
Además, Laravel es altamente escalable debido a la flexibilidad de PHP y al soporte integrado de sistemas de caché distribuidos como Redis. Esto facilita el escalado horizontal de las aplicaciones web en Laravel, permitiéndoles manejar cientos de millones de solicitudes mensuales.
Asimismo, Laravel es un framework web que se basa en la comunidad, combinando los mejores paquetes para ofrecer un marco de trabajo sólido y fácil de usar. Ha sido desarrollado por miles de programadores de todo el mundo, lo que demuestra de esta red colaborativa una gran fuerza y vitalidad.
PHP es un lenguaje de programación de código abierto, utilizado principalmente para el desarrollo web. Permite la creación de sitios dinámicos e interactivos, con capacidad de conexión a bases de datos y generación de contenido dinámico.
Laravel es un framework web de código abierto implementado en PHP que sigue un patrón de diseño MVC (Modelo-Vista-Controlador) conun sistema de enrutamiento.
Algunas de las características más destacadas de Laravel son las siguientes:
Sistema de enrutamiento y controladores de Laravel: el sistema de enrutamiento de Laravel permite que las solicitudes HTTP sean dirigidas a los controladores específicos de una manera muy intuitiva y flexible. Laravel mapea las rutas a los controladores y proporciona herramientas para definir rutas con autenticación, filtrado de peticiones, entre otras funcionalidades. Los controladores en Laravel se encargan de la lógica de negocio y son responsables de dirigir las solicitudes a las vistas o modelos correspondientes y pueden agruparse en grupos de controladores para reutilizar dicha lógica.
Blade: es el sistema de plantillas web de Laravel. Es potente y fácil de usar, permitiendo escribir plantillas de forma intuitiva. Blade proporciona útiles directivas de control de flujo y herencia de plantillas, facilitando la reutilización del código y la separación de la lógica de presentación de la lógica de negocio.
Query Builder: es la interfaz de Laravel para crear y ejecutar consultas de base de datos de una manera fluida y cómoda. Permite realizar operaciones de base de datos comunes como seleccionar, insertar, actualizar y eliminar registros de manera segura y eficiente. También ofrece la capacidad de utilizar sentencias SQL puras cuando sea necesario.
Eloquent: es el ORM (Object-Relational Mapping) incluido en Laravel. Proporciona una forma simple y elegante de interactuar con las bases de datos. En Eloquent, se crean "Modelos", que son equivalentes a las entidades en un modelo E-R, y son clases que interactúan con las tablas de la base de datos. Además, Eloquent proporciona métodos para recuperar y modificar los registros de la base de datos de manera intuitiva.
Kits Breeze y Jetstream: Laravel Breeze y Laravel Jetstream son kits de inicio para la creación de aplicaciones web en Laravel. Breeze proporciona una implementación mínima y simple de todas las funciones de autenticación de Laravel. Jetstream, por otro lado, proporciona un stack más robusto y completo que además incluye verificación de correo electrónico, gestión de sesiones, API de soporte y opciones de equipo, entre otros. Ambos son herramientas útiles para iniciar un nuevo proyecto rápidamente, con funcionalidades tanto básicas como avanzadas ya implementadas.
Una de las cualidades más destacadas de Laravel es su documentación oficial. Esta fuente de información es ampliamente reconocida por su calidad y detalle, y se recomienda referirse a ella constantemente. La documentación oficial de Laravel brinda instrucciones claras, ejemplos prácticos y una guía completa para aprovechar al máximo el potencial de este popular framework web. No dudes en consultarla para resolver dudas y familiarizarte con las mejores prácticas de desarrollo con Laravel.
El funcionamiento de Laravel puede ser explicado a través del modelo MVC (Modelo-Vista-Controlador) y su sistema de enrutamiento. Este proceso, que se descompone en una serie de pasos concatenados, comienza cuando se lanza una solicitud al sistema y culmina con la recepción de una respuesta:
Elaboración propia. Diagrama de funcionamiento en Laravel(CC BY-SA)
Solicitud del usuario: todo comienza cuando un usuario realiza una petición a la aplicación Laravel. Esta petición puede ser originada de diversas formas, como al seleccionar un enlace, enviar un formulario o realizar una solicitud a través de una API. Este momento marca el inicio dando lugar a una serie de operaciones internas para procesar dicha petición.
Enrutamiento a un controlador de Laravel: el sistema de enrutamiento de Laravel recibe la solicitud del usuario y la compara con la lista de rutas definidas en el archivo de rutas. La ruta define qué método de qué controlador se debe llamar para manejar la solicitud.
Interacción con el modelo de datos: el controlador, a su vez, puede interactuar con el modelo de datos para obtener los datos necesarios. El modelo de datos en Laravel representa las tablas en la base de datos y contienen la lógica para recuperar y almacenar información en dichas tablas. Por ejemplo, si el usuario solicita ver un artículo en particular, el controlador podría llamar al método find en el Modelo Article para recuperar el artículo de la base de datos.
El controlador invoca la vista: una vez que el controlador tiene los datos que necesita, los pasa a una vista. Las vistas en Laravel utilizan un sistema de plantillas web propio llamado Blade que generan el HTML que se enviará al navegador del usuario. Las vistas pueden mostrar los datos pasados por el controlador.
Renderización de la vista en el navegador del usuario: una vez que Blade ha generado la vista en HTML, se devuelve al navegador del usuario como respuesta a la solicitud inicial. Laravel también puede devolver otros tipos de respuestas, como JSON para las solicitudes API.
Por otro lado, la arquitectura de Laravel es una estructura bien diseñada y cohesiva que se basa en la interacción de sus elementos clave. Estos permiten desarrollar aplicaciones web de manera eficiente, manteniendo al mismo tiempo la modularidad, la facilidad de prueba y la claridad del código. Los cuatro conceptos clave de esta arquitectura son los siguientes:
Request Lifecycle: a diferencia del funcionamiento mediante un enfoque de MVC con enrutamiento explicado anteriormente, el ciclo de vida de una solicitud en Laravel es un proceso más específico que sigue cada solicitud desde su entrada hasta su salida del sistema. Cuando un usuario realiza una solicitud (por ejemplo, accediendo a una página web), la solicitud pasa por una serie de etapas antes de devolver una respuesta. Inicialmente, la solicitud se envía al archivo de entrada public/index.php, después se prepara la instancia de la aplicación, se cargan los servicios, se determina la ruta que coincide con la solicitud, y finalmente se devuelve la respuesta al usuario. Comprender el ciclo de vida de una solicitud es clave para entender cómo Laravel gestiona las peticiones y responde a ellas.
Service Container: el contenedor de servicios es una poderosa herramienta para gestionar las dependencias de clase y realizar inyección de dependencias. Esencialmente, es un almacén para las instancias de clase y sus dependencias, que pueden ser resueltas y utilizadas donde sea necesario. Su uso en Laravel ayuda a mantener el código limpio, modular y fácil de probar.
Service Providers: los proveedores de servicios son el núcleo de la inicialización de una aplicación Laravel. Son responsables de vincular y registrar servicios en el contenedor de servicios, lo que significa que definen cómo se deben construir varios componentes del sistema. Laravel viene con una serie de proveedores de servicios para funciones clave, como la base de datos, el sistema de archivos, la validación y más.
Facades: las facades en Laravel son una interfazde programación que proporciona acceso a servicios o clases en la aplicación a través de un estilo de sintaxis estática. A pesar de parecer estáticas, en realidad no lo son. Facilitan un acceso limpio y elegante a los servicios, permitiendo evitar la inyección de dependencias en cada lugar que se necesita un servicio.
HTML (HyperText Markup Language) es un lenguaje de marcado utilizado para crear y estructurar el contenido de las páginas web. Define la estructura y organización de los elementos, como textos, imágenes y enlaces, permitiendo su visualización y navegación en los navegadores web.
Laravel procesa una solicitud de usuario a través de su sistema de enrutamiento, que redirige la solicitud a un controlador. El controlador puede interactuar con el modelo de datos para obtener información relevante. Luego, los datos se pasan a una vista, donde se generan en HTML para ser devueltos al usuario. Los elementos clave de la arquitectura de Laravel incluyen el ciclo de vida de la solicitud, el contenedor de servicios, los proveedores de servicios y las facades.
Laravel presenta una estructura de directorios bien definida y organizada. Esta estructura facilita el desarrollo al separar los diferentes aspectos de la aplicación en directorios y subdirectorios claros, cada uno con una finalidad específica.
El directorio raíz de un proyecto de Laravel contiene varios directorios y archivos, pero hay unos cuantos que son particularmente relevantes para el desarrollo web:
routes/: en este directorio se define el comportamiento de la aplicación en respuesta a las solicitudes HTTP. El archivo web.php es especialmente importante para las rutas web de la aplicación, donde se vinculan las rutas a los controladores correspondientes.
app/Http/Controllers/: aquí se alojan los controladores, que son responsables de gestionar la lógica de la aplicación y las interacciones entre el modelo y las vistas.
resources/views/: este directorio almacena las vistas, que representan visualmente la aplicación. Los archivos de vista, generalmente en formato Blade (.blade.php), construyen la interfaz de usuario de la aplicación.
database/migrations/: contiene las migraciones de la base de datos. Las migraciones son utilizadas para controlar la evolución de la estructura de la base de datos a lo largo del tiempo, permitiendo la creación, modificación y eliminación de tablas y campos mediante código PHP en lugar de SQL puro.
app/Models/: aquí se encuentran los modelos de Laravel. Los modelos representan las tablas de la base de datos y permiten interactuar con ellas de manera orientada a objetos a través del ORM Eloquent. Los modelos desempeñan un papel fundamental en la manipulación y gestión de datos en las aplicaciones Laravel.
Además de estos directorios, hay otros que también juegan roles importantes. El directorio config/ guarda la configuración global de la aplicación, permitiendo personalizar el comportamiento de Laravel según nuestras necesidades. En public/ se almacenan los archivos accesibles al público, como las hojas de estilo CSS, scripts de JavaScript, imágenes, entre otros. La carpeta storage/ es utilizada para guardar archivos generados por la aplicación, incluyendo logs, caché y archivos subidos por el usuario. El directorio tests/ aloja los tests unitarios y de integración para asegurar que tu código funcione correctamente. Finalmente, vendor/ contiene las dependencias de Composer.
PHP es un lenguaje de programación de código abierto, utilizado principalmente para el desarrollo web. Permite la creación de sitios dinámicos e interactivos, con capacidad de conexión a bases de datos y generación de contenido dinámico.
Si quieres profundizar en los detalles de la estructura de directorios de Laravel, especialmente en el directorio app/, puedes consultar la documentación oficial de Laravel sobre estructura de directorios. Aquí encontrarás información más detallada y completa sobre cada uno de los directorios y subdirectorios de un proyecto Laravel. Además esta documentación también proporciona orientación sobre cómo y cuándo utilizar cada directorio durante el desarrollo de tu aplicación web.
José, Antonio y Luis, tres desarrolladores de software, han sido encomendados para construir una aplicación web en la empresa financiera Innovaciones Fintech. Dicha aplicación será crucial para gestionar los préstamos personales de los clientes, e incluirá módulos para el manejo de perfiles de clientes, cálculo de intereses, plazos de pago, y generación de informes, con énfasis en la seguridad y autenticación.
Para este proyecto, deciden utilizar Laravel. José, Antonio y Luis coinciden en la decisión de aprender los elementos fundamentales de Laravel para desarrollar la aplicación. Estos elementos incluyen rutas, controladores, vistas, bases de datos, modelos, autenticación y validación. Este compromiso con la autoformación marca el inicio de su viaje con Laravel, confiando en que este framework web les proporcionará las herramientas necesarias para crear una aplicación robusta y segura.
En el marco del desarrollo web en Laravel, existen una serie de elementos fundamentales que impulsan el proceso creativo y funcional. Estos elementos desempeñan un papel fundamental al colaborar entre sí, permitiendo el desarrollo eficiente de aplicaciones web robustas y de alto rendimiento.
Es esencial comprender estos elementos y cómo interactúan entre sí en el contexto del ecosistema de Laravel. De este modo, los desarrolladores pueden aprovechar plenamente las ventajas de Laravel, como la facilidad de uso, la escalabilidad y flexibilidad.
En Laravel, las rutas se utilizan para asociar solicitudes HTTP con métodos de controladores o con funciones anónimas. Estas rutas determinan cómo se manejará una solicitud en función de su URL y método HTTP.
Las rutas en Laravel se definen en archivos de ruta que se encuentran dentro del directorio /routes. Laravel ofrece varios archivos de ruta para diferentes propósitos, incluyendo web.php para las rutas web, api.php para las rutas de la API, entre otros. El archivo routes/web.php es el más comúnmente utilizado y donde la mayoría de las rutas de la aplicación serán definidas.
Existen dos formas principales de definir rutas en Laravel:
Enrutamiento basado en Closure: se define una función anónima (Closure) directamente en la ruta. Este método es conveniente para rutas simples, pero puede ser problemático en aplicaciones web grandes. Un ejemplo de enrutamiento basado en Closure sería:
use Illuminate\Support\Facades\Route;
Route::get('/saludo', function () {
return '¡Hola, mundo!';
});
En este ejemplo, cuando se accede a la ruta /saludo utilizando el método HTTP GET, se ejecutará una función anónima que devuelve el mensaje ¡Hola, mundo!.
Enrutamiento basado en controladores: en lugar de utilizar una función anónima, se especifica un método de un controlador a ejecutar. Esta es la forma recomendada de definir rutas en aplicaciones grandes, ya que promueve una estructura más organizada. Un ejemplo de enrutamiento basado en controladores sería:
use App\Http\Controllers\LibroController;
Route::get('/libros', [LibroController::class, 'index']);
En este ejemplo, cuando se accede a la ruta /libros mediante el método HTTP GET, se ejecutará el método index del controlador LibroController. Esto permite separar la lógica de manejo de la ruta en controladores dedicados, lo que facilita el mantenimiento y la organización del código.
Otra de características de las rutas en Laravel es poder definir parámetros de ruta. Estos permiten capturar segmentos de la URL solicitada. Por ejemplo:
Route::get('/producto/{id}', function (string $id) {
return 'Producto con ID ' . $id '.';
});
Este código define una ruta GET que responde a cualquier solicitud que comienza con /producto/ y luego tiene algún valor adicional. Ese valor se captura y se pasa a la función Closure con el parámetro $id. Por ejemplo, si la URL solicitada fuera /producto/123, entonces $id sería 123, y el código retornaría Producto con ID 123.
En Laravel, también puedes nombrar rutas. Esto te permite generar nuevas URL o redireccionar a rutas específicas de manera más conveniente. Por ejemplo:
Route::get('/usuario/cuenta', function () {
// ...
})->name('perfil');
En este caso, se establece una ruta GET para /usuario/cuenta que asocia una función anónima y nombra la ruta como perfil. Este método de nombrar rutas es beneficioso ya que, si en algún punto se cambia la URL, no es necesario hacer ajustes en todas las partes del código ya que se utiliza el alias perfil.
Asimismo, Laravel permite agrupar rutas, lo que puede ayudar a mantener organizado el código de enrutamiento, especialmente para aplicaciones web más grandes con muchas rutas. Esto puede incluir namespaces, prefijos de URL, entre otros. Por ejemplo, si un grupo de rutas utiliza el mismo controlador, puede usarse el método controller para definir el controlador común para todas las rutas dentro del grupo:
use App\Http\Controllers\PedidoController;
Route::controller(PedidoController::class)->group(function () {
Route::get('/pedido/{id}', 'show');
Route::post('/pedido', 'store');
});
Este código en Laravel agrupa dos rutas que utilizan el controlador PedidoController. La primera ruta maneja solicitudes GET para mostrar detalles de un pedido basándose en un ID, mientras que la segunda ruta maneja solicitudes POST para almacenar nuevos pedidos.
Otra de las posibilidades que ofrecen las rutas en Laravel es que pueden tener un middleware asociado. Los middleware proporcionan un mecanismo conveniente para filtrar las solicitudes HTTP que entran a la aplicación. Por ejemplo, Laravel incluye un middleware que verifica si el usuario de la aplicación está autenticado:
Route::get('/vuelos', function () {
// Solo los usuarios autenticados pueden acceder a esta ruta.
})->middleware('auth');
Este código de Laravel define una ruta /vuelos a la que solo los usuarios autenticados pueden acceder. Esto se logra mediante el uso del middleware auth que verifica la autenticación del usuario antes de procesar la solicitud.
Una URL (Uniform Resource Locator) es una cadena de caracteres que especifica la ubicación de un recurso en la web. Es la dirección que utilizamos para acceder a páginas web, imágenes, videos y otros recursos en Internet. Consiste en varios elementos, incluyendo el protocolo de comunicación (como HTTP o HTTPS), el dominio y la ruta del recurso.
HTTP (Hypertext Transfer Protocol) es un protocolo de comunicación utilizado en Internet para la transferencia de información entre un cliente y un servidor. Es la base para la interacción entre navegadores web y servidores, permitiendo solicitar y enviar recursos, como páginas web, mediante peticiones y respuestas estructuradas.
Lo presentado anteriormente es solo una introducción a las rutasen Laravel y solo cubre una pequeña parte de las capacidades y funcionalidades disponibles. Para obtener un conocimiento más completo y detallado, esimprescindible que examines la documentación oficial de Laravel sobre enrutamiento.
En Laravel, los controladores son elementos fundamentales que manejan la lógica de la aplicación web. Funcionan de intermediario entre el modelo, que es la representación de los datos, y las vistas, que son las que le presentan esos datos al usuario. En otros términos, los controladores recogen las solicitudes de los usuarios, realizan las acciones requeridas y luego responden adecuadamente.
Además, los controladores trabajan en estrecha relación con las rutas de Laravel, que determinan cómo se atienden las solicitudes HTTP y vinculan una URL específica a un método de un controlador. Esto permite que los controladores y las rutas trabajen en conjunto para asegurar una eficaz comunicación entre el modelo y las vistas, preservando una lógica de negocio clara.
Crear un controlador en Laravel es sencillo gracias al uso de Artisan, la interfaz de línea de comandos de Laravel. Para crear un controlador básico, se utiliza el siguiente comando:
php artisan make:controller NombreControlador
Este comando generará un archivo en el directorio app/Http/Controllers llamado NombreControlador.php. Dentro de este archivo, se define la clase del controlador con métodos que corresponden a las diferentes acciones que el controlador puede realizar.
A continuación, se muestra un ejemplo básico de un controlador denominado LibroController:
<?php
namespace App\Http\Controllers;
use App\Models\Libro;
use Illuminate\View\View;
class LibroController extends Controller
{
// Devuelve una vista con la información de un libro específico.
public function show(string $id): View
{
return view('libro.ficha', ['libro' => Libro::findOrFail($id)]);
}
}
Una vez que se haya creado la clase y un método de dicho controlador, puede definirse una ruta al método del controlador de esta manera:
use App\Http\Controllers\LibroController;
Route::get('/libro/{id}', [LibroController::class, 'show']);
Cuando una solicitud entrante GET coincide con la URI de la ruta especificada, se invocará el método show() en la clase LibroController.php y el parámetro de la ruta id se pasará al método.
Por otro lado, un controlador de recursos en Laravel es un tipo especial de controlador que se encarga de gestionar las operaciones CRUD básicas para un recurso específico. En Laravel, un recurso se refiere a una entidad de la aplicación web, como un usuario, una publicación en un blog o un producto, que requiere ser manipulada mediante operaciones CRUD. Este tipo de controladores ahorran tiempo y evitan la repetición de código al manejar solicitudes comunes de un recurso de una aplicación web.
Para crear un controlador de recurso, se utiliza la opción --resource:
Este comando creará un controlador de recursos llamado FotoController con un conjunto predefinido de métodos que corresponden a las operaciones CRUD (Crear, Leer, Actualizar, Eliminar).
Los métodos manejados por el controlador de recursos se muestran en la siguiente tabla:
Tabla de rutas para Foto
Método HTTP
Ruta URI
Nombre de la ruta
Método del controlador
Descripción
GET
/fotos
fotos.index
index()
Muestra una lista de fotos
GET
/fotos/create
fotos.create
create()
Muestra el formulario para crear una nueva foto
POST
/fotos
fotos.store
store()
Guarda la nueva foto creada
GET
/fotos/{foto}
fotos.show
show()
Muestra una foto específica
GET
/fotos/{foto}/edit
fotos.edit
edit()
Muestra el formulario para editar una foto específica
PUT/PATCH
/fotos/{foto}
fotos.update
update()
Actualiza una foto específica
DELETE
/fotos/{foto}
fotos.destroy
destroy()
Elimina una foto específica
Estas rutas se pueden generar automáticamente usando Route::resource en el archivo de rutas:
use App\Http\Controllers\FotoController;
Route::resource('fotos', FotoController::class);
Finalmente, es posible indicarle a Laravel que un controlador de recursos está asociado a un modelo específico. Esto se hace mediante la opción --model en el comando para crear el controlador.
Esta opción le dice a Laravel que este controlador debe estar preparado para manejar las peticiones en relación con el modelo Foto. Como resultado, Laravel generará automáticamente métodos en el controlador que corresponden a las operaciones CRUD en la base de datos para el modelo Foto.
HTTP (Hypertext Transfer Protocol) es un protocolo de comunicación utilizado en Internet para la transferencia de información entre un cliente y un servidor. Es la base para la interacción entre navegadores web y servidores, permitiendo solicitar y enviar recursos, como páginas web, mediante peticiones y respuestas estructuradas.
Una URL (Uniform Resource Locator) es una cadena de caracteres que especifica la ubicación de un recurso en la web. Es la dirección que utilizamos para acceder a páginas web, imágenes, videos y otros recursos en Internet. Consiste en varios elementos, incluyendo el protocolo de comunicación (como HTTP o HTTPS), el dominio y la ruta del recurso.
Lo que se ha presentado hasta ahora es simplemente una visión inicial de los controladoresen Laravel, y sólo abarca una pequeña parte de las posibilidades y funciones existentes. Para profundizar en la comprensión y obtener detalles más precisos, es esencial que consultes la documentación oficial de Laravel sobre controladores.
Artisanes la interfaz de línea de comandos (CLI) incluida con Laravel. Proporciona una serie de comandos útiles para ayudarte a construir y administrar tu aplicación.
Algunos comandos útiles de Artisan incluyen php artisan servepara iniciar un servidor de desarrollo local, php artisan make:controllerpara generar un nuevo controlador como se ha visto anteriormente, php artisan migratepara ejecutar las migraciones de la base de datos o php artisan make:modelpara crear un nuevo modelo de Eloquent. Para ver una lista completa de los comandos disponibles, puedes usar el comandophp artisan listen tu terminal.
Además de los comandos integrados, Artisan también te permite definir tus propios comandos personalizados, lo que te permite automatizar partes de tu flujo de trabajo que podrían ser repetitivas o tediosas.
Si estás interesado en aprender más sobre Artisan y cómo puedes aprovecharlo al máximo en tu desarrollo de Laravel, consulta la documentación oficial de Laravel sobre Artisan:https://laravel.com/docs/artisan.
El comando php artisan make:controller NombreControlador --resource es utilizado en Laravel para crear un controlador de recursos. Este tipo de controlador viene con métodos predefinidos para las operaciones CRUD (Crear, Leer, Actualizar, Eliminar). Por lo tanto, la afirmación es verdadera.
Las vistas en Laravel son elementos fundamentales que constituyen la interfaz de usuario de la aplicación. Las vistas son responsables de presentar información al usuario y permitirle interactuar con la aplicación. Los archivos de vista se almacenan por defecto en la carpeta resources/views del proyecto Laravel.
Laravel ofrece un sistema de plantillas web denominado Blade, que proporciona numerosas ventajas en comparación con el uso de código PHP puro en las vistas. Alguna de las ventajas son la herencia de plantillas, el uso de directivas de control de flujo, caché en las vistas para un rendimiento mayor, entre otros. Las plantillas Blade en Laravel tienen la extensión .blade.php para diferenciarlas de las vistas que utilizan código PHP puro.
Para ilustrar el uso de Blade, veamos un ejemplo sencillo. Supongamos que queremos pasar una variable a una vista y mostrar esa vista en Blade. Para ello, primero en nuestro controlador, podemos pasar una variable a la vista de la siguiente manera:
public function index()
{
$nombre = 'Juan';
return view('bienvenida', ['nombre' => $nombre]);
}
Luego, en nuestra vista bienvenida.blade.php, podemos mostrar esta variable usando la sintaxis de llaves dobles de Blade:
<h1>¡Bienvenido, {{ $nombre }}!</h1>
Por otro lado, Blade ofrece una serie de directivas que pueden mejorar la legibilidad y la eficiencia del código de la vista. Algunas de las directivas más comunes son @if, @isset, @for, @foreach, etc. Las directivas Blade proporcionan una interfaz concisa para las estructuras de control PHP comunes. Aquí hay un ejemplo de su uso:
Este código verifica si existe una variable llamada nombre y muestra un saludo personalizado si está definida, de lo contrario muestra un saludo genérico.
Además, Blade facilita la reutilización de plantillas mediante la creación de layouts. Un layout es una plantilla base que puede ser extendida en otras vistas.
Como muestra, un layout podría contener todo el HTML que se comparte en todas las páginas de un sitio web, como la cabecera, el pie de página, los scripts, las hojas de estilo, etc. Un ejemplo de layout sería el siguiente:
En este ejemplo, @yield('título') y @yield('contenido') representan las secciones que serán definidas por las vistas que extienden este layout.
Una vista que extiende este layout podría ser así:
// Vista index.blade.php
@extends('base')
@section('título', 'Página de inicio')
@section('contenido')
<p>Este es el contenido de la página de inicio.</p>
@endsection
En esta vista, @section('título', 'Página de inicio') y @section('contenido') están completando las secciones definidas en el layout principal.
Hasta ahora, lo que se ha presentado es solo una introducción superficial a las vistas en Laravel y al motor de plantillas Blade. Estos temas abarcan solo una pequeña parte de las características y capacidades que ofrecen. Para profundizar en tu comprensión y obtener información más precisa, es esencial que consultes la documentación oficial de Laravel sobre vistasy Blade.
Considera las ventajas de utilizar el sistema de plantillas Blade en comparación con el uso de PHP puro para las vistas en Laravel. ¿Cómo crees que estas ventajas pueden impactar en la eficiencia y mantenibilidad del código de tu aplicación? ¿Puedes identificar algún posible desafío o limitación que podría surgir al usar Blade?
Las bases de datos constituyen un elemento fundamental en cualquier aplicación web, debido a que son el medio principal de almacenamiento y recuperación de datos. Laravel proporciona una abstracción elegante para manejar diferentes sistemas gestores de bases de datos como MySQL/MariaDB, PostgreSQL, SQLite y SQL Server.
La configuración de la base de datos se realiza, entre otras alternativas, en el archivo .env, que se encuentra en el directorio raíz de un proyecto Laravel. Este archivo es responsable de manejar las variables del entorno, y contiene varias configuraciones de base de datos como el sistema gestor de base de datos, el host, el puerto, la base de datos, el usuario y la contraseña. Es importante mantener este archivo seguro y no comprometer sus detalles, especialmente en un repositorio de código público.
En el contexto de bases de datos, Laravel utiliza migraciones para gestionarlas. Podemos considerar las migraciones como una forma de control de versiones para la base de datos, ya que permiten a los equipos de desarrollo compartir y modificar el modelo de la base de datos sin interrumpir el flujo de trabajo. Estas migraciones se almacenan en archivos que describen una serie de acciones que deben ejecutarse en la base de datos.
Crear una migración en Laravel es un procedimiento bastante sencillo. El comando Artisan php artisan make:migration es la manera más fácil de hacerlo. Este comando genera un nuevo archivo de migración en el directorio database/migrations. El archivo de migración es una clase que contiene dos métodos: up() y down(). El método up() se utiliza para agregar nuevas tablas, columnas o índices a la base de datos, mientras que el método down() deshace las acciones realizadas por el método up().
Por ejemplo, si quisiéramos crear una migración para una tabla vuelos, el comando sería el siguiente:
php artisan make:migration create_vuelos_table
Este comando genera un archivo en el directorio de migraciones con un nombre similar a YYYY_MM_DD_create_vuelos_table.php. Dentro de este archivo se crea una clase donde se definen los métodos up() y down(). El método up() podría ser así:
public function up()
{
Schema::create('vuelos', function (Blueprint $table)
{
$table->id();
$table->string('aerolínea');
$table->string('destino');
$table->date('fecha_salida');
$table->timestamps();
});
}
En este caso, el método up() se encarga de crear una nueva tabla en la base de datos llamada vuelos. Esta tabla contiene varias columnas, como id, aerolínea, destino y fecha_salida. Además, se generan automáticamente dos columnas adicionales llamadas created_at y updated_at mediante el uso de la función timestamps().
Después de haber definido nuestra migración, es necesario aplicarla a la base de datos. Para llevar a cabo este proceso, se utiliza el comando php artisan migrate.
En caso de que sea necesario deshacer todas las migraciones y comenzar desde cero, el comando php artisan migrate:fresh resultará de gran utilidad. Este comando eliminará todas las tablas de la base de datos y luego ejecutará nuevamente todas las migraciones desde el principio, permitiéndonos reiniciar el estado de la base de datos de manera rápida y sencilla.
Una vez configurada nuestra base de datos y aplicadas nuestras migraciones, podemos realizar consultas utilizando Query Builder de Laravel. Este elemento de Laravel ofrece una interfaz unificada y cómoda para crear y ejecutar consultas de bases de datos. Nos permite llevar a cabo operaciones programáticas y seguras en la base de datos, tales como recuperar, agregar, actualizar y eliminar registros.
A continuación se muestran varios ejemplos en Query Builder para gestionar los datos de la tabla vuelos. Por ejemplo, para recuperar todos los vuelos de una aerolínea específica, se usaría el método get:
Este código devuelve una colección de todos los vuelos de la aerolínea Epsilon. Para mostrar los resultados de esta consulta, puede utilizarse un bucle para recorrer la colección y acceder a cada vuelo individualmente. Aquí hay un ejemplo de cómo se podría mostrar la información de los vuelos:
Este código muestra en pantalla el destino y la fecha de salida de todos los vuelos de la aerolínea Epsilon, utilizando un bucle foreach y la función echo.
Para agregar un nuevo vuelo a la base de datos, se usaría el método insert:
Este código eliminará todos los vuelos de Epsilon a Nueva York de la base de datos.
El sembrado de datos en Laravel es una técnica utilizada para poblar la base de datos con datos iniciales o de prueba. Esta práctica es especialmente útil durante el desarrollo y las pruebas, ya que permite tener un conjunto de datos consistente y predecible. Los archivos de semillas se almacenan en el directorio database/seeders y contienen clases que definen el método run, el cual especifica los datos a insertar.
Por ejemplo, para añadir un registro de ejemplo en la tabla vuelos, puedes utilizar el archivo DatabaseSeeder.php ubicado en database/seeders/ y emplear el Query Builder de Laravel. Luego, dentro del método run, puedes añadir el siguiente código:
Una vez completado el archivo de semillas, ejecuta php artisan db:seed para insertar los datos en la base de datos. Luego, verifica los datos insertados de ejemplo en la tabla vuelos.
MySQL es un sistema de gestión de bases de datos relacional, de código abierto y ampliamente utilizado. Permite almacenar, organizar y acceder a grandes cantidades de datos de manera eficiente, ofreciendo un entorno robusto y flexible para el desarrollo de aplicaciones y sitios web dinámicos.
MariaDB es un sistema de gestión de bases de datos relacional, de código abierto y derivado de MySQL. Ofrece compatibilidad con el lenguaje SQL y proporciona características adicionales y mejoras en comparación con MySQL, como mayor rendimiento y escalabilidad, seguridad mejorada y una mayor flexibilidad de almacenamiento.
PostgreSQL es un sistema de gestión de bases de datos relacional, de código abierto y altamente escalable. Es conocido por su robustez, confiabilidad y capacidades avanzadas como soporte para transacciones ACID, integridad referencial, consultas complejas y funciones almacenadas, lo que lo hace adecuado para aplicaciones empresariales y de alto rendimiento.
SQLite es un sistema de gestión de bases de datos relacional, de código abierto y sin servidor. Es ligero y autónomo, lo que permite que la base de datos se almacene en un solo archivo. Es ampliamente utilizado en aplicaciones móviles y embebidas debido a su facilidad de uso y eficiencia.
SQL Server es un sistema de gestión de bases de datos relacional, desarrollado por Microsoft. Ofrece un entorno seguro y confiable para el almacenamiento y gestión de datos, con soporte para transacciones ACID, escalabilidad y capacidades avanzadas como integración con herramientas y servicios de Microsoft.
Lo que hemos explorado hasta ahora es una aproximación inicial a la configuración de bases de datos en Laravel, las migraciones, la interfaz Query Builder y el sembrado. Estos temas constituyen tan solo una pequeña parte de las funcionalidades y habilidades que estos elementos tienen para ofrecer. Para profundizar en el conocimiento y obtener información más detallada, es crucial que examines la documentación oficial de Laravel sobre introducción y configuración de bases de datos, sobre las migraciones, sobre Query Builder y sobre el sembrado.
Eloquent es el ORM (Object-Relational Mapping) predeterminado en Laravel, su función principal es permitir la interacción con las bases de datos de manera más intuitiva y orientada a objetos. Así, en lugar de escribir consultas SQL puras, los desarrolladores pueden utilizar la sintaxis de Eloquent para realizar estas operaciones.
La estructura principal de Eloquent se basa en el concepto de Modelos. En Laravel, un Modelo es una representación en PHP de una tabla en la base de datos. Por ejemplo, si tienes una tabla llamada comentarios, tendrías un modelo llamado Comentario. Este modelo te permite interactuar con los registros de esa tabla como si fueran objetos en PHP. Sin embargo, no todas las tablas de la base de datos se corresponden con un modelo. Por ejemplo, podrías crear tablas intermedias para las relaciones varios a varios y no tendrían un modelo asociado.
En Laravel, se utiliza el término Modelo para hacer referencia a cada entidad dentro de un modelo de datos, siguiendo el paradigma del Modelo Entidad-Relación (E-R). De esta manera, cada Modelo en Laravel representa una Entidad en el modelo E-R.
Un ejemplo básico de un modelo de Eloquent sería el siguiente:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comentario extends Model
{
use HasFactory;
// Asociación de la tabla 'comentarios' con el modelo.
protected $table = 'comentarios';
// Definición de los atributos asignables en masa.
protected $fillable = ['contenido', 'post_id', 'fecha'];
}
Este código define el modelo Comentario en una clase con el mismo nombre y que se deriva de la clase Model. La clase representa un modelo para la tabla comentarios en una base de datos. Tiene asignados los atributos contenido, post_id y fecha como atributos asignables en masa, lo que permite la creación y actualización masiva de registros en la tabla.
Una de las características de Eloquent es que cada columna de la tabla de la base de datos corresponde a una propiedad en la instancia del modelo. Por ejemplo, puedes acceder a los datos de un registro de la tabla comentarios a través de las propiedades del modelo. Un ejemplo de cómo obtener un comentario y mostrar su contenido sería:
En este ejemplo, Comentario::find(1) es una instrucción que busca el comentario con identificador 1 en la base de datos y devuelve una instancia de la clase Comentario con dichos datos. La propiedad contenido corresponde a la columna contenido de la tabla de comentarios en la base de datos.
Eloquent proporciona una variedad de funciones para establecer relaciones entre los modelos. Estas funciones incluyen hasOne para las relaciones uno a uno, hasMany para las relaciones uno a varios y belongsToMany para las relaciones varios a varios, entre otras. Estas funciones permiten definir y acceder fácilmente a las relaciones entre los registros de la base de datos, lo que facilita el trabajo con datos relacionales en Laravel.
Un ejemplo de cómo definir una relación uno a varios entre un modelo Post (también conocido como publicación) y un modelo Comentario sería:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// Asociación de la tabla 'posts' con el modelo.
protected $table = 'posts';
// Definición de los atributos asignables en masa.
protected $fillable = ['titulo', 'contenido', 'fecha_publicacion'];
public function comentarios()
{
return $this->hasMany(Comentario::class);
}
}
En este ejemplo, la función comentarios() define una relación uno a varios entre Post y Comentario. Eloquent interpreta esto y sabe que cada post puede tener varios comentarios.
Laravel permite además definir la relación uno a varios inversa con la función belongsTo. Un ejemplo de cómo se podría definir este tipo de relación entre el modelo Comentario y el modelo Post sería el siguiente:
public function post(): BelongsTo
{
return $this->belongsTo(Post::class);
}
Aquí, la función post() define una relación uno a varios inversa entre Comentario y Post. Eloquent interpreta esto y sabe que cada comentario puede tener un post.
Por otro lado, Eloquent también provee una sintaxis conveniente para crear, leer, actualizar y eliminar registros.
Por ejemplo, para crear un nuevo comentario, podría ser así:
En este ejemplo, se crea una nueva instancia de Comentario, se establecen las propiedades contenido y post_id, y luego se llama al método save() para guardar el nuevo comentario en la base de datos.
Para leer y mostrar el título de un comentario, un ejemplo sería:
Este código busca un comentario con el identificador 1 en la base de datos y guarda esa información en la variable $comentario. Luego, se muestra el título del comentario utilizando las propiedad título de la instancia $comentario.
Para actualizar un registro existente, se busca el registro, se modifican las propiedades y se guarda de nuevo:
En este código, se busca un comentario con el identificador 1 y se cambia su contenido. Luego, se guarda dicho comentario modificado en la base de datos.
Para eliminar un registro, se puede usar el método delete():
En este caso, Eloquent buscará el comentario con identificador 1 y lo eliminará de la base de datos.
ORM (Object-Relational Mapping) es una técnica de programación que facilita la gestión de la relación entre las bases de datos relacionales y los objetos de programación. Permite a los programadores interactuar con su base de datos como si fueran objetos de su lenguaje de programación preferido, ocultando la complejidad de SQL y las operaciones de la base de datos.
Hasta ahora, lo que hemos abordado es una introducción a Eloquent, el ORM (Object-Relational Mapping) de Laravel. Si quieres profundizar en tus conocimientos sobre Eloquent, sus principios básicos y su uso eficiente, te recomendamos que consultes la documentación oficial de Laravel sobre Eloquent.
Además, la gestión de las relaciones entre los modelos en Eloquent es vital para establecer y manejar asociaciones entre las tablas de las bases de datos. Para obtener una explicación más detallada de cómo hacerlo, puedes visitar la sección de relaciones de Eloquent en la documentación oficial.
Finalmente, si te interesa cómo manipular y transformar conjuntos de resultados de manera eficiente utilizando las colecciones de Eloquent, te sugerimos que eches un vistazo a la sección sobre colecciones de Eloquent en la documentación oficial.
ORM (Object-Relational Mapping) es una técnica de programación que facilita la gestión de la relación entre las bases de datos relacionales y los objetos de programación. Permite a los programadores interactuar con su base de datos como si fueran objetos de su lenguaje de programación preferido, ocultando la complejidad de SQL y las operaciones de la base de datos.
Como habrás podido apreciar, Eloquent es una herramienta muy poderosa y flexible que te permite interactuar con tus bases de datos de una manera mucho más intuitiva y orientada a objetos.
Al utilizar Eloquent, puedes representar tus tablas de bases de datos como clases y tus filas como objetos. Esto te facilita la lectura y escritura de código, ya que te permite trabajar con tu base de datos como si estuvieras trabajando con objetos y clases en PHP. Además, con Eloquent, las operaciones de bases de datos se vuelven más seguras y eficientes, ya que se encarga de las transacciones y las consultas preparadas.
La autenticación y validación son dos elementos fundamentales en el desarrollo de aplicaciones web en Laravel. Juntas, aseguran que sólo los usuarios autorizados puedan acceder a ciertas partes de la aplicación, y que los datos que se ingresan sean correctos y seguros.
La autenticación en Laravel se refiere al proceso de verificar la identidad de un usuario antes de permitirle acceder a ciertos recursos o funcionalidades de una aplicación web. Esta medida de seguridad es esencial para proteger la privacidad y la seguridad de los datos del usuario.
Entre todas las opciones que ofrece Laravel, el kit de inicio Laravel Breeze es una excelente opción para empezar a manejar la autenticación en este framework web. Laravel Breeze es una implementación mínima y simple de todas las características de autenticación de Laravel, incluyendo registro, inicio de sesión, verificación de correo electrónico, confirmación de contraseña y restablecimiento de contraseña.
Para comprobar si el usuario está autenticado, puede utilizarse el método check de Auth. Este método devolverá true si el usuario está autenticado:
use Illuminate\Support\Facades\Auth;
if (Auth::check()) {
// El usuario ha iniciado sesión.
}
Este código permite verificar si el usuario actual está autenticado en la aplicación web. Si el usuario ha iniciado sesión correctamente, el método check devolverá verdadero. Esto puede ser útil para permitir o restringir el acceso a ciertas partes de una aplicación web basándose en si el usuario ha iniciado sesión o no.
Además, es posible obtener información del usuario autenticado de la siguiente manera:
use Illuminate\Support\Facades\Auth;
$usuario = Auth::user();
$id = Auth::id();
Este código obtiene el usuario autenticado actual y luego su identificador. El método Auth::user() devuelve la instancia de la clase User del usuario autenticado, mientras que el método Auth::id() devuelve su identificador. Si no hay usuario autenticado, ambos retornan null.
Si no se desea usar Laravel Breeze, este framework web proporciona otras alternativas como autenticar manualmente a los usuarios utilizando el método attempt(). Este método recibe las credenciales del usuario, contenidas en un array, y valida las credenciales con los usuarios de la base de datos. Un ejemplo sería el siguiente:
public function authenticate(Request $request): RedirectResponse
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
if (Auth::attempt($credentials)){
$request->session()->regenerate();
return redirect()->route('perfil');
}
}
Este método de un controlador recibe una solicitud y verifica si los datos de email y password son válidos. Luego intenta autenticar al usuario con estos datos usando Auth::attempt. Si la autenticación tiene éxito, regenera la sesión para evitar secuestros de sesión y redirige al usuario a la ruta nombrada como perfil.
Por otra parte, la validación en Laravel es el proceso de asegurar que los datos ingresados por los usuarios sean correctos y seguros antes de ser procesados. Laravel hace que la validación de datos sea una tarea simple al proporcionar una variedad de reglas de validación que se pueden aplicar a los datos entrantes.
A continuación, se muestra un ejemplo básico de validación en Laravel en un método de un controlador:
public function store(Request $request)
{
$datos_validados = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8',
]);
// Resto de la lógica del controlador.
}
En este ejemplo, los datos entrantes son validados con las siguientes reglas: el nombre es obligatorio y no puede tener más de 255 caracteres, el correo electrónico es obligatorio, debe ser una dirección de correo electrónico válida y debe ser único en la tabla de usuarios, y, por último, la contraseña es obligatoria y debe tener al menos 8 caracteres.
Un middleware es un componente de software que actúa como intermediario en la comunicación entre diferentes partes de una aplicación. En el contexto de las aplicaciones web, se utiliza para filtrar las solicitudes HTTP entrantes y realizar diversas tareas antes de que la solicitud llegue al controlador o después de que la respuesta salga de este. Estas tareas pueden incluir autenticación, autorización, registro de actividades, manejo de errores, y más.
En Laravel, un middleware es una clase que se utiliza para inspeccionar y filtrar las solicitudes HTTP que ingresan a la aplicación. Los middlewares en Laravel son una forma efectiva de centralizar la lógica que se aplica a múltiples rutas o incluso a toda la aplicación. Por ejemplo, el middleware auth se usa para verificar que un usuario esté autenticado antes de permitir el acceso a ciertas rutas.
Hasta este punto, hemos explorado un enfoque introductorio a la autenticación en Laravel, un componente crucial para la protección y gestión del acceso a tus aplicaciones web. Para ampliar aún más tu comprensión de la autenticación en Laravel, entender sus fundamentos y aprender a implementarla de manera eficaz, te sugerimos consultar la documentación oficial de Laravel sobre autenticación.
Además, Laravel proporciona el kit de inicio Breeze, una solución accesible y eficiente para incorporar autenticación en tu proyecto Laravel. Encuentra información más detallada en la documentación oficial de Laravel sobre los kits de inicio.
Finalmente, Laravel presenta potentes herramientas de validación para garantizar la integridad de los datos ingresados en tus aplicaciones web. Para obtener una guía completa sobre cómo validar formularios y solicitudes en Laravel, te recomendamos visitar la documentación oficial de Laravel sobre validación.
La autenticación en Laravel es el proceso de confirmar la identidad de un usuario antes de otorgarle acceso a ciertas partes de una aplicación web. Laravel Breeze es un kit de inicio que simplifica la implementación de características de autenticación, incluyendo registro, inicio de sesión, verificación de correo electrónico, y más. El método Auth::check() puede usarse para verificar si un usuario está autenticado, y los métodos Auth::user() y Auth::id() proporcionan información sobre el usuario autenticado y su identificador, respectivamente.
María y Gloria, dos desarrolladoras autónomas, deciden colaborar junto a Manuel en la creación de varios proyectos utilizando Laravel para perfeccionar sus habilidades con este framework web. El proyecto que abordan es un sitio web para un restaurante local, que incluye un menú en línea, reservas de mesa y una sección de reseñas de clientes.
Tras la instalación y configuración de Laravel, establecen las rutas y controladores para las diferentes secciones del sitio web y generan las vistas correspondientes con el sistema de plantillas Blade. Luego gestionan la base de datos y las migraciones, permitiendo a los clientes reservar mesas y dejar reseñas. Por último, con la integración de la autenticación y la validación, aseguran que sólo los usuarios registrados puedan hacer reservas y dejar reseñas.
La creación de proyectos en Laravel es, sin lugar a dudas, una manera perfecta para aprender y consolidar las habilidades en el desarrollo de aplicaciones web de este framework web ya que se ponen en práctica los conceptos tanto teóricos como técnicos.
En esta sección aprenderás de una manera muy básica pero muy práctica a instalar y configurar Laravel, definir rutas y controladores, generar vistas utilizando el sistema de plantillas Blade, gestionar bases de datos a través de migraciones, utilizar el ORM Eloquent para manejar tus datos y, finalmente, a integrar sistemas de autenticación y validación en tus aplicaciones. Todas estas guías te proporcionarán al final una base de conocimientos en el futuro para el desarrollo de aplicaciones web con Laravel.
Para la instalación, configuración y ejecución de Laravel, sigue los siguientes pasos:
Paso 1: Comprueba la instalación de PHP
Primero, verifica que tienes PHP instalado en tu sistema. Abre la terminal y escribe el siguiente comando:
php --version
Si PHP está correctamente instalado, podrás ver el número de versión en la respuesta.
Paso 2: Verifica la instalación de Composer
Una vez que has confirmado que PHP está instalado correctamente, el siguiente paso es verificar la instalación de Composer. Composer es la herramienta de gestión de dependencias para PHP que Laravel utiliza.
Para comprobar si Composer está instalado en tu sistema, escribe el siguiente comando en la terminal:
composer --version
Si Composer está instalado, verás el número de versión en la respuesta. En caso contrario, deberás instalar Composer antes de continuar.
Paso 3: Instala Laravel
Con PHP y Composer instalados, ya estás listo para instalar Laravel. La forma más recomendada de conseguirlo es a través de Composer creando un nuevo proyecto de Laravel. Para hacerlo, escribe el siguiente comando en la terminal, reemplazando nombre-proyecto por el nombre que quieres darle a tu proyecto:
Este comando creará un nuevo directorio con el nombre de tu proyecto y descargará todas las dependencias necesarias para Laravel.
Paso 4: Configura tu proyecto Laravel
Después de instalar Laravel, el próximo paso es configurar tu aplicación web. Laravel proporciona el siguiente conjunto de archivos de configuración:
config/: este directorio contiene archivos de configuración que definen diversas opciones y ajustes para tu aplicación. Estos archivos permiten personalizar aspectos como establecer el comportamiento de la caché y de las sesiones, definir el sistema de correo electrónico, agregar las credenciales para servicios de terceros y mucho más.
.env: este archivo se encuentra en la raíz de tu proyecto y se encarga de almacenar las variables de entorno de tu aplicación. Estas variables se utilizan para definir aspectos como los detalles de conexión a la base de datos, las claves API, y otras configuraciones que podrían variar entre los entornos de desarrollo y producción. Por seguridad, nunca debes compartir este archivo, ya que puede contener información sensible. Laravel incluye además un archivo .env.example para mostrarte cómo estructurar tu archivo .env y qué variables podrías necesitar definir.
En este momento, no es necesario que hagas ninguna modificación en estos archivos, pero a medida que tu aplicación crezca y necesites hacer ajustes, estos serán los lugares a los que acudirás para hacer cambios.
Paso 5: Ejecuta tu aplicación Laravel
Ahora que ya has instalado y configurado Laravel, puedes empezar a utilizarlo. Para poner en marcha tu aplicación, desde la terminal entra en la carpeta de tu proyecto y ejecuta el siguiente comando:
php artisan serve
Este comando iniciará un servidor de desarrollo local. Ahora, puedes abrir tu navegador web y dirigirte a http://localhost:8000 para ver tu aplicación Laravel en acción.
¡Felicidades! Acabas de instalar y ejecutar tu primera aplicación web en Laravel.
Si quieres aprender más, es recomendable que estudies la documentación oficial de Laravel sobre su instalación y su configuración:
Documentación oficial de Laravel sobreinstalación.
Documentación oficial de Laravel sobreconfiguración.
A continuación, se mostrarán los pasos para crear una aplicación web en Laravel con rutas y controladores. Estos elementos son fundamentales para gestionar el flujo de información en tu aplicación web.
Paso 1: Crea un nuevo proyecto de Laravel
Comienza creando un nuevo proyecto Laravel. Para ello, ejecuta el siguiente comando en tu terminal:
Esto creará un nuevo proyecto Laravel en el directorio rutas-controladores.
Paso 2: Define las rutas
Las rutas son una parte crucial de cualquier aplicación Laravel. Permiten determinar cómo responderá la aplicación a las diferentes peticiones HTTP que reciba.
Abre el archivo routes/web.php, borra su contenido existente y reemplázalo con el siguiente código:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EjemploController;
// Página de inicio
Route::get('/', function () {
return view('welcome');
});
// Ruta que devuelve un saludo
Route::get('/saludo', function () {
return '¡Hola, mundo!';
});
// Ruta con un parámetro (id de usuario)
Route::get('/user/{id}', function (string $id) {
return 'Este es el usuario con ID '. $id . '.';
});
// Ruta con un parámetro opcional (nombre de libro)
Route::get('/libro/{name?}', function (string $nombre = null) {
return $nombre ? 'El nombre del libro es ' . $nombre . '.' : 'El nombre del libro no fue proporcionado.';
});
// Ruta con restricción de formato (solo dígitos)
Route::get('/item/{id}', function (string $id) {
return 'El ID ' . $id . ' del ítem solo acepta dígitos.';
})->where('id', '[0-9]+');
// Ruta que redirige a otra ruta
Route::get('/hola', function () {
return redirect('/saludo');
});
// Rutas que llaman a métodos en un controlador
Route::get('/inicio', [EjemploController::class, 'mostrarInicio']);
Route::get('/felicitar', [EjemploController::class, 'mostrarFelicitacion']);
Route::get('/cumplido/{nombre}', [EjemploController::class, 'mostrarCumplido']);
Route::get('/producto/ver/{id}', [EjemploController::class, 'mostrarProducto']);
Este código incluye ejemplos de diferentes tipos de rutas que puedes definir en Laravel.
Paso 3: Crea un controlador
Los controladores en Laravel son otra pieza fundamental en la estructura de una aplicación. Permiten agrupar la lógica relacionada con el manejo de las peticiones HTTP en un solo lugar.
Para crear un controlador, puedes hacerlo manualmente o utilizar en tu terminal el comando php artisan make:controller en la carpeta de tu proyecto. A continuación, crea un controlador llamado EjemploController ejecutando el siguiente comando:
php artisan make:controller EjemploController
Esto creará un nuevo archivo EjemploController.php en el directorio app/Http/Controllers. Abre este archivo y reemplaza su contenido con el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class EjemploController extends Controller
{
private $productos = [
1 => ['nombre' => 'Libro de cocina', 'descripcion' => 'Contiene más de 200 recetas.'],
2 => ['nombre' => 'Guitarra eléctrica', 'descripcion' => 'Incluye estuche.'],
3 => ['nombre' => 'Ordenador portátil', 'descripcion' => '15.6 pulgadas, 16 GB RAM, 500 GB SSD.']
];
// Muestra la página de inicio
public function mostrarInicio()
{
return view('welcome');
}
// Muestra una felicitación
public function mostrarFelicitacion()
{
return '¡Enhorabuena!';
}
// Muestra un cumplido personalizado
public function mostrarCumplido(string $nombre)
{
return '¡Eres una persona maravillosa, ' . $nombre . '!';
}
// Muestra los detalles de un producto
public function mostrarProducto(string $id)
{
if (isset($this->productos[$id])) {
return 'Producto: ' . $this->productos[$id]['nombre'] . '. Descripción: ' . $this->productos[$id]['descripcion'];
} else {
return 'El producto con ID ' . $id . ' no existe.';
}
}
}
Este controlador contiene varios métodos que se corresponden con las rutas definidas en en el paso anterior.
Paso 4: Prueba tu proyecto
Finalmente, es momento de poner en marcha tu aplicación web. Para ello, ejecuta el comando php artisan serve en tu terminal. Esto iniciará un servidor de desarrollo en http://localhost:8000.
Abre este enlace en tu navegador y prueba las diferentes rutas que has definido. Por ejemplo, para probar la ruta /saludo puedes acceder a ella visitando http://localhost:8000/saludo.
Ahora que ya sabes cómo definir rutas y crear controladores en Laravel, es el momento de que experimentes por ti mismo. Modifica las rutas y los controladores que has creado, añade nuevos, y trata de entender cómo funcionan.
Si quieres aprender más, es recomendable que estudies la documentación oficial de Laravel sobre rutas y controladres:
A continuación, se presentarán los pasos para crear una aplicación web en Laravel utilizando vistas y el sistema de plantillas web Blade. Estos componentes son fundamentales para administrar la presentación de información en tu aplicación web.
Paso 1: Crea un nuevo proyecto de Laravel
Inicia un nuevo proyecto de Laravel con el nombre vistas-blade mediante el siguiente comando:
Este controlador gestiona las cuatro rutas que definimos anteriormente, cargando diferentes vistas para cada una.
Paso 4: Establece el estilo del sitio web
Dentro del directorio public/, crea una carpeta llamada css/. A continuación, crea un archivo llamado estilo.css dentro de la carpeta css/. Añade el siguiente código al archivo:
Este archivo CSS define los estilos que se utilizarán en las vistas de tu aplicación.
Paso 5: Crea el layout o plantilla principal de las vistas en Blade
Las vistas de Laravel se encuentran en el directorio resources/views/. Allí, crea un nuevo directorio plantillas/ y, dentro de este, un archivo base.blade.php. Inserta el siguiente código:
<html xmlns="http://www.w3.org/1999/xhtml" lang="es">
<head>
<meta charset="utf-8" />
<title>@yield('titulo') - Nombre de la empresa</title>
<link rel="stylesheet" href="{{ asset('css/estilo.css') }}" />
</head>
<body>
<h1>Nombre de la empresa</h1>
@yield('contenido')
<footer>Sitio web de elaboración propia.</footer>
</body>
</html>
Paso 6: Crea las vistas en Blade
Crea la carpeta paginas/ dentro del directorio resources/views/. Luego, dentro de paginas/ crea el archivo inicio.blade.php con el siguiente código:
@extends('plantillas.base')
@section('titulo', 'Inicio')
@section('contenido')
<nav>
Inicio |
<a href="{{ route('vehiculos') }}">Coches</a> |
<a href="{{ route('soporte') }}"><span>Escríbenos</span></a> |
<a href="{{ route('sobre-nosotros') }}"><span>Quiénes somos</span></a>
</nav>
<h2>Inicio</h2>
<p>Bienvenido a una web de ejemplo de una lista de coches.</p>
@endsection
Luego, crea resources/views/paginas/transportes.blade.php con el siguiente código:
A continuación, crea resources/views/paginas/nuestra-empresa.blade.php con el siguiente código:
@extends('plantillas.base')
@section('titulo', 'Quiénes somos')
@section('contenido')
<nav>
<a href="{{ route('portada') }}">Inicio</a> |
<a href="{{ route('vehiculos') }}">Coches</a> |
<a href="{{ route('soporte') }}"><span>Escríbenos</span></a> |
Quiénes somos
</nav>
<h2>Quiénes somos</h2>
<p>Página que informa sobre en qué consiste el sitio web.</p>
@endsection
Paso 7: Prueba tu proyecto
Finalmente, es momento de poner en marcha tu aplicación web. Para ello, ejecuta el comando php artisan serve en tu terminal. Esto iniciará un servidor de desarrollo en http://localhost:8000.
Explora las diferentes páginas del sitio web y comprueba cómo funcionan las rutas, los controladores y las vistas, y cómo se relacionan entre ellas con los identificadores utilizados. Los identificadores utilizados no siguen una convención establecida, esto se ha hecho con fines didácticos para que puedas comprobar a qué hace referencia cada ruta, nombre de controlador, método de controlador y vista.
Ahora que ya sabes cómo trabajar con vistas y Blade en Laravel, es el momento de que experimentes por ti mismo. Puedes modificar las vistas existentes, crear nuevas vistas y utilizar las características avanzadas de Blade para mejorar la presentación de tu aplicación web.
Si quieres aprender más, es recomendable que estudies la documentación oficial de Laravel sobre vistas y el sistema de plantillas web Blade:
La respuesta es falsa. En Laravel, todas las vistas se guardan en el directorio resources/views/. Esto es una convención en Laravel para mantener todas las vistas en un solo lugar para su fácil acceso y organización. Las vistas en Laravel son archivos que usan el sistema de plantillas web Blade, que proporciona una serie de características útiles para trabajar con datos y PHP de forma más eficaz en las vistas.
A continuación, se describirán los pasos para crear una aplicación web en Laravel utilizando una base de datos, migraciones, Query Builder y sembrado. Estos elementos son fundamentales para administrar y gestionar la persistencia de datos en tu aplicación web.
Paso 1: Crea una base de datos
Para ello, vamos a utilizar XAMPP, un paquete de software libre que combina Apache, MariaDB/MySQL, PHP y Perl, proporcionando un entorno de desarrollo web local. Esto nos permitirá crear y administrar nuestra base de datos de forma sencilla a través de PhpMyAdmin. Por lo tanto, iniciaremos XAMPP y accederemos a PhpMyAdmin para crear una base de datos denominada laravel_bbdd.
Paso 2: Crea un nuevo proyecto de Laravel
Usando Composer, genera un nuevo proyecto Laravel utilizando el siguiente comando: composer create-project laravel/laravel query-builder. Este comando creará una carpeta llamada query-builder/ que contendrá tu nuevo proyecto Laravel.
Paso 3: Enlaza tu proyecto a la base de datos
Es momento de conectar tu proyecto Laravel a la base de datos que acabas de crear. Dentro de la carpeta del proyecto, abre el archivo .env y configura los datos de la base de datos. Un ejemplo sería el siguiente:
Ahora que tu proyecto está conectado a la base de datos, crea un archivo de migración para una tabla denominada canciones. Para ello, en tu terminal dentro de la carpeta del proyecto ejecuta el comando php artisan make:migration create_canciones_table. Una vez que hayas ejecutado el comando, deberías ver un nuevo archivo en database/migrations. Después, abre el archivo y edita el método up() poniéndolo así:
public function up(): void
{
Schema::create('canciones', function (Blueprint $table)
{
$table->id();
$table->string('titulo');
$table->string('artista');
$table->date('lanzamiento');
$table->string('genero');
$table->integer('duracion');
$table->timestamps();
});
}
Este código crea una tabla llamada canciones en la base de datos. La tabla tiene columnas para el título, artista, fecha de lanzamiento, género y duración de una canción, además de columnas de tiempo para la creación y actualización de registros debido a la función timestamps().
Paso 5: Migra y siembra
A continuación, ejecuta el comando php artisan migrate y comprueba en PhpMyAdmin que la tabla se ha creado correctamente.
Recuerda que si necesitas hacer cambios en tus migraciones, puedes utilizar el comando php artisan migrate:fresh. Este comando eliminará todas las tablas de la base de datos y luego las volverá a crear ejecutando todas las migraciones. Es útil cuando estás desarrollando y necesitas reiniciar la base de datos para probar los cambios en la estructura.
Ahora, vamos a sembrar la base de datos con una canción de ejemplo utilizando el seeder de Laravel. Primero, crea el archivo de seeder utilizando el siguiente comando en tu terminal: php artisan make:seeder CancionSeeder.
Luego, abre el archivo database/seeders/CancionSeeder.php y, dentro del método run, inserta una canción de ejemplo utilizando Query Builder, de la siguiente manera:
A continuación, abre el archivo database/seeders/DatabaseSeeder.php y añade una llamada a CancionSeeder dentro del método run:
$this->call(CancionSeeder::class);
Finalmente, ejecuta el comando php artisan db:seed para sembrar la base de datos con la canción de ejemplo y verifica que dicha canción se ha registrado correctamente en la base de datos.
Paso 6: Define tus rutas
Ahora, define las rutas para tus futuras vistas y acciones en el archivo routes/web.php con el siguiente código:
Este código define las rutas que asignan varias URL a los métodos en CancionController. Una para la página de inicio, una para mostrar las canciones, una para mostrar el formulario para insertar una canción y la última para almacenar la canción a insertar.
Paso 7: Crea un controlador
Genera un nuevo controlador llamado CancionController con php artisan make:controller CancionController e introduce el siguiente código en él:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CancionController extends Controller
{
public function portada()
{
return view('inicio');
}
public function composiciones()
{
$datos = DB::table('canciones')->get();
return view('piezas-musicales', ['canciones' => $datos]);
}
public function crear()
{
return view('insertar');
}
public function almacenar(Request $request)
{
DB::table('canciones')->insert([
'titulo' => $request->input('title'),
'artista' => $request->input('artist'),
'lanzamiento' => $request->input('launch'),
'genero' => $request->input('genre'),
'duracion' => $request->input('duration'),
]);
return redirect()->route('obras-musicales');
}
}
Este código define el controlador CancionController con varias métodos. Primero, el método portada() muestra la vista de la página de inicio, mientras que el método composiciones() recupera y muestra datos de la tabla canciones. Luego, el método crear() muestra una vista para insertar una nueva canción. Por último, el método almacenar() recibe los datos de la canción desde la solicitud HTTP que envía el formulario de insertar canciones, luego inserta la canción en la base de datos y redirige a la vista con nombre obras-musicales.
Paso 8: Establece el estilo del sitio web
En la carpeta public/, crea una nueva carpeta llamada css/. Luego, dentro de la carpeta css/, crea un archivo denominado estilo.css e incluye el siguiente código:
Paso 9: Crea ellayouto plantilla principal de las vistas en Blade
El layout o esqueleto principal de la aplicación web será resources/views/layouts/app.blade.php. Para ello, en resources/views/ crea el directorio layouts/ y dentro de esta carpeta crea el archivo app.blade.php y coloca el siguiente código en él:
<html xmlns='http://www.w3.org/1999/xhtml' lang='es'>
<head>
<meta charset='utf-8' />
<title>@yield('titulo') - Mis canciones favoritas</title>
<link rel='stylesheet' href='{{ asset("css/estilo.css") }}'>
</head>
<body>
<h1>Mis canciones favoritas</h1>
@yield('contenido')
<footer>Sitio web de elaboración propia.</footer>
</body>
</html>
Paso 10: Crea las vistas en Blade
Crea la vista de inicio de tu aplicación en resources/views/inicio.blade.php con este código:
@extends('layouts.app')
@section('titulo', 'Inicio')
@section('contenido')
<nav>
Inicio |
<a href='{{ route("obras-musicales") }}'>Canciones</a> |
<a href='{{ route("anadir") }}'>Añadir</a>
</nav>
<h2>Inicio</h2>
<p>Web de ejemplo que muestra y añade canciones en una base de datos.</p>
@endsection
Crea una vista que muestre todas las canciones de la base de datos. Para hacer esto, crea resources/views/piezas-musicales.blade.php y añade este código:
@extends('layouts.app')
@section('titulo', 'Canciones')
@section('contenido')
<nav>
<a href='{{ route("principal") }}'>Inicio</a> |
Canciones |
<a href='{{ route("anadir") }}'>Añadir</a>
</nav>
<h2>Canciones</h2>
<p>Tabla con las canciones favoritas insertadas en la base de datos.</p>
@if (count($canciones) > 0)
<table>
<thead>
<tr>
<th>Título</th>
<th>Artista</th>
<th>Año</th>
<th>Género</th>
<th>Duración</th>
</tr>
</thead>
<tbody>
@foreach ($canciones as $cancion)
<tr>
<td>{{ $cancion->titulo }}</td>
<td>{{ $cancion->artista }}</td>
<td>{{ $cancion->lanzamiento }}</td>
<td>{{ $cancion->genero }}</td>
<td>{{ $cancion->duracion }}</td>
</tr>
@endforeach
</tbody>
</table>
@else
<p>¡No hay canciones favoritas añadidas actualmente!</p>
@endif
@endsection
A continuación, necesitas una vista para insertar nuevas canciones en la base de datos. Para esto, crea resources/views/insertar.blade.php y añade este código:
@extends('layouts.app')
@section('titulo', 'Insertar')
@section('contenido')
<nav>
<a href='{{ route("principal") }}'>Inicio</a> |
<a href='{{ route("obras-musicales") }}'>Canciones</a> |
Añadir
</nav>
<h2>Añadir una nueva canción</h2>
<p>Página que para insertar una canción en la base de datos.</p>
<form method='post' action='{{ route("guardar") }}'>
@csrf
<label>Título:</label>
<input type='text' name='title' required='required'><br />
<label>Artista:</label>
<input type='text' name='artist' required='required'><br />
<label>Año:</label>
<input type='date' name='launch' required='required'><br />
<label>Género:</label>
<input type='text' name='genre' required='required'><br />
<label>Duración:</label>
<input type='number' name='duration' required='required'><br /><br />
<input type='submit' value='Enviar'>
</form>
@endsection
Paso 11: Prueba tu proyecto
Finalmente, llegó el momento de lanzar tu aplicación web. Para lograrlo, abre tu terminal y ejecuta el siguiente comando: php artisan serve. Al hacerlo, se iniciará un servidor de desarrollo en la dirección http://localhost:8000.
Ahora que ya tienes una idea de cómo configurar bases de datos, crear migraciones, hacer consultas con Query Builder y sembrar en Laravel, es el momento de que pongas en práctica lo aprendido. Modifica y añade nuevas migraciones, experimenta con Query Builder para familiarizarte con su funcionamiento y siembra nuevos registros de ejemplo.
Si quieres aprender más, es altamente recomendable que te sumerjas en la documentación oficial de Laravel sobre bases de datos, migraciones, Query Builder y sembrado:
A continuación, aprenderás a utilizar Eloquent de Laravel para manejar relaciones uno a varios. Trabajaremos con un modelo de datos de ejemplo que tiene dos entidades, Pintor y Pintura, y que estarán relacionadas mediante una relación uno a varios. El modelo de datos se representa en el siguiente esquema Entidad-Relación:
Elaboración propia. Diagrama E-R y modelo relacional(CC BY-SA)
Paso 1: Crea una base de datos
omienza por abrir XAMPP y accede a PhpMyAdmin. Allí, necesitarás crear una nueva base de datos que llamaremos laravel_eloquent_1n.
Paso 2: Crea un nuevo proyecto de Laravel
Ahora, genera un nuevo proyecto Laravel utilizando el comando composer create-project laravel/laravel eloquent-uno-varios en tu terminal. Esto te proporcionará una nueva aplicación Laravel en blanco donde podrás comenzar a trabajar.
Paso 3: Enlaza tu proyecto a la base de datos
Asegúrate de que tu aplicación Laravel puede comunicarse con tu base de datos. Para hacer esto, navega a la carpeta del proyecto y abre el archivo .env. Aquí, deberás introducir los detalles de la base de datos que acabas de crear. Un ejemplo sería el siguiente:
Paso 4: Crea los modelos y sus respectivas migraciones
Laravel emplea modelos para representar las tablas de tu base de datos, mientras que utiliza las migraciones para crear y modificar dichas tablas. En este caso, hay que crear dos modelos junto a sus respectivas migraciones: uno para Pintor y otro para Pintura.
Para hacer esto, entra en tu terminal a la carpeta del proyecto y procede a generar el modelo y la migración para Pintor mediante el siguiente comando:
php artisan make:model Pintor --migration
Esto generará un archivo de migración que creará la tabla denominada pintors. Este nombre se debe a que Laravel, por defecto, utiliza el nombre en minúsculas del modelo y lo pluraliza en inglés agregando una s al final.
Luego de esto, procede a generar el modelo y el archivo de migración para Pintura mediante el siguiente comando:
php artisan make:model Pintura --migration
Así se generan los modelos y archivos de migraciones necesarias para Pintor y Pintura en tu proyecto Laravel.
Paso 5: Edita las migraciones
A continuación, debemos abrir y editar los archivos de migración correspondientes a las tablas pintors y pinturas. Estas migraciones se encargan de crear la estructura de las tablas en la base de datos.
Ahora, abre el archivo de migración create_pintors_table y modifica el método up() con el siguiente código:
public function up(): void
{
Schema::create('pintors', function (Blueprint $table)
{
$table->id();
$table->string('nombre')->unique();
$table->string('bio');
$table->timestamps();
});
}
Este código define la estructura de la tabla pintors con las columnas nombre y bio, junto con las columnas necesarias para el control de tiempo de creación y actualización.
Luego, abre el archivo de migración create_pinturas_table y modifica el método up() con el siguiente código:
public function up(): void
{
Schema::create('pinturas', function (Blueprint $table)
{
$table->id();
$table->string('título');
$table->string('descripción');
$table->foreignId('pintor_id')->constrained();
$table->timestamps();
});
}
Este código define la estructura de la tabla pinturas. La línea de código $table->foreignId('pintor_id')->constrained(); crea una columna pintor_id y establece en ella una restricción de clave foránea o secundaria. Esta restricción se vincula a la clave primaria id de la tabla pintors, siguiendo las convenciones de Laravel. Esto significa que el valor de pintor_id en la tabla pinturas debe existir en la columna de clave primaria id de la tabla pintors. Esta restricción asegura la integridad referencial y garantiza que solo se puedan agregar valores de pintor_id válidos que correspondan a registros existentes en id de la tabla pintors.
Paso 6: Ejecuta las migraciones
Una vez que hayas modificado los archivos de migración, ejecuta php artisan migrate en la terminal para crear las tablas en tu base de datos. Si necesitas hacer cambios en tus migraciones, recuerda ejecutar php artisan migrate:fresh para restablecer la base de datos.
Luego, entra en PhpMyAdmin y verifica si se han creado las tablas y las relaciones correctamente entrando en la pestaña Designer de la base de datos laravel_eloquent_1n.
Paso 7: Define las rutas
En routes/web.php, configura las rutas que permitirán a tu aplicación interactuar con los datos de los pintores y las pinturas:
<?php
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PintorController;
use App\Http\Controllers\PinturaController;
Route::get('/', function () {
return 'Ejemplo de Eloquent de una relación uno a varios.';
});
Route::get('/agregar-pintores', [PintorController::class, 'store'])
->name('guardar');
Route::get('/mostrar-pintores', [PintorController::class, 'index'])
->name('indexar');
Route::get('/mostrar-pintor-{id}', [PintorController::class, 'show'])
->name('enseñar');
Route::get('/modificar-pintor', [PintorController::class, 'update'])
->name('actualizar');
Route::get('/borrar-primer-pintor', [PintorController::class, 'remove'])
->name('eliminar');
Route::get('/agregar-pinturas', [PinturaController::class, 'add'])
->name('añadir');
Route::get('/mostrar-pinturas', [PinturaController::class, 'present'])
->name('presentar');
Paso 8: Crea los controladores
Ahora, debes crear controladores para tus modelos Pintor y Pintura. Los controladores manejan la lógica de tu aplicación y las interacciones con la base de datos. Utiliza php artisan make:controller PintorController y php artisan make:controller PinturaController para crear estos controladores.
Una vez creados, abre el controlador PintorController e introduce el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pintor;
class PintorController extends Controller
{
public function store()
{
$pintor = new Pintor;
$pintor->nombre = 'Leonardo Da Vinci';
$pintor->bio = 'Pintor renacentista, ingeniero, inventor, etc.';
$pintor->save();
$pintor = new Pintor;
$pintor->nombre = 'Diego Velázquez';
$pintor->bio = 'Pintor barroco español y maestro universal.';
$pintor->save();
$pintor = new Pintor;
$pintor->nombre = 'Rembrandt';
$pintor->bio = 'Pintor muy admirado por su vívido realismo.';
$pintor->save();
$pintor = new Pintor;
$pintor->nombre = 'Francisco de Goya';
$pintor->bio = 'Pintor español precursor del expresionismo.';
$pintor->save();
return 'Cuatro pintores insertados en la base de datos.';
}
public function index()
{
$pintores = Pintor::all();
return $pintores;
}
public function show(string $id)
{
$pintor = Pintor::find($id);
return $pintor;
}
public function update()
{
$pintor = Pintor::where('nombre', 'Leonardo Da Vinci')->first();
$pintor->nombre = 'Leonardo di ser Piero da Vinci';
$pintor->save();
}
public function remove()
{
$pintor = Pintor::find(1);
$pintor->delete();
}
}
Luego, edita PinturaController con el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pintor;
use App\Models\Pintura;
class PinturaController extends Controller
{
public function add()
{
$pintor = Pintor::find(2);
$pintura = new Pintura;
$pintura->título = 'Las meninas';
$pintura->descripción = 'Muy popular y de grandes dimensiones';
$pintura->pintor_id = $pintor->id;
$pintura->save();
$pintura = new Pintura;
$pintura->título = 'Vieja friendo huevos';
$pintura->descripción = 'Pintado en Sevilla en 1618.';
$pintura->pintor_id = $pintor->id;
$pintura->save();
}
public function present()
{
$pinturas = Pintura::all();
return $pinturas;
}
}
Ahora, y muy importante, asegúrate de que todo está funcionando correctamente ejecutando php artisan serve y abriendo tu aplicación en el navegador. Experimenta con las diferentes rutas definidas y juega con las relaciones entre pintores y pinturas.
Paso 9: Define las relaciones entre los modelos
Para terminar, vamos a definir las relaciones uno a varios y su inversa entre Pintor y Pintura en los modelos.
Abre app/Models/Pintor.php y crea la relación uno a varios con el siguiente código:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Pintor extends Model
{
use HasFactory;
public function pinturas(): HasMany
{
return $this->hasMany(Pintura::class);
}
}
Abre app/Models/Pintura.php y crea la relación uno a varios inversa con el siguiente código:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Pintura extends Model
{
use HasFactory;
public function pintor(): BelongsTo
{
return $this->belongsTo(Pintor::class);
}
}
Paso 10: Define nuevas rutas y crea el nuevo controlador
Ahora, añade en el archivo de texto routes/web.php el siguiente código:
use App\Http\Controllers\Relacion1NController;
Route::get('/pinturas-velazquez', [Relacion1NController::class, 'read'])
->name('leer');
Route::get('/pintor-meninas', [Relacion1NController::class, 'display'])
->name('exponer');
Luego, crea un controlador con php artisan make:controller Relacion1NController y ponlo así:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pintor;
use App\Models\Pintura;
class Relacion1NController extends Controller
{
public function read()
{
$pintor = Pintor::whereNombre('Diego Velázquez')->first();
foreach($pintor->pinturas as $pintura)
{
echo $pintura->título . '<br />';
echo $pintura->descripción . '<br /><br />';
}
}
public function display()
{
$pintura = Pintura::whereTítulo('Las meninas')->first();
echo $pintura->pintor->id . '<br />';
echo $pintura->pintor->nombre . '<br />';
echo $pintura->pintor->bio . '<br />';
}
}
Paso 11: Prueba tu proyecto
Finalmente, llegó el momento de lanzar tu aplicación web. Para lograrlo, abre tu terminal y ejecuta el siguiente comando: php artisan serve. Al hacerlo, se iniciará un servidor de desarrollo en la dirección http://localhost:8000.
Verifica no solo las rutas creadas al principio sino las rutas que has definido recientemente, /pinturas-velazquez y /pintor-meninas, que se encargan de la relación uno a varios y uno a varios inversa, respectivamente.
Ahora que ya tienes una introducción a cómo crear modelos, definir relaciones y manejar colecciones con Eloquent en Laravel, es el momento de que refuerces lo aprendido. Modifica los modelos que has creado, establece nuevas relaciones y experimenta con las colecciones para familiarizarte con el poder de Eloquent.
Si quieres aprender más, te recomendamos que te adentres en la documentación oficial de Laravel sobre Eloquent, sus relaciones y colecciones:
María y Juan, propietarios de una librería, deciden usar Laravel con Eloquent para gestionar su inventario de libros. Con la relación de varios a varios de Eloquent, pueden vincular múltiples autores con cada libro y viceversa, lo que facilita el seguimiento y la organización de su creciente colección. La aplicación les ayuda a manejar eficientemente su librería y a centrarse en su pasión: promover la lectura en su comunidad.
El ejercicio a resolver es el siguiente:
Elaboración propia. Diagrama E-R y modelo relacional(CC BY-SA)
Configura una base de datos para una librería utilizando Laravel y Eloquent. Crea un modelo Autor, especificado con nombre y apellido, y un modelo Libro, que incluirá título y año de publicación. Establece una relación de varios a varios entre Autor y Libro ayudándote de una tabla intermedia. Después, configura rutas de ejemplo para manipular estos datos. Por último, ejecuta la aplicación para asegurarte de que todo funcione correctamente.
El objetivo de este ejercicio es practicar cómo configurar y usar las relaciones de varios a varios en Eloquent, el ORM (Object-Relational Mapping) proporcionado por Laravel.
A continuación, se mostrarán los pasos para crear una aplicación web en Laravel que use autenticación y validación.
Paso 1: Inicia XAMPP y crea la base de datos
Primero, necesitarás iniciar XAMPP. Una vez iniciado, accede a PhpMyAdmin y crea una base de datos llamada laravel_aut_val.
Paso 2: Crea un proyecto Laravel
Ahora, abre la terminal o línea de comandos en la ubicación donde deseas crear tu proyecto y escribe el siguiente comando: composer create-project laravel/laravel autentica-valida. Esto creará un nuevo proyecto Laravel llamado autentica-valida.
Paso 3: Configura los datos de la base de datos
Dentro de la carpeta de tu proyecto, busca el archivo .env y configura los detalles de la base de datos que acabas de crear. Esto incluirá el nombre de la base de datos, el usuario, la contraseña y el host de la base de datos.
Paso 4: Instala Laravel Breeze
Para la autenticación, utilizaremos Laravel Breeze. Para ello, entra en tu terminal en la carpeta de tu proyecto e instálalo usando el comando composer require laravel/breeze --dev.
Paso 5: Verifica la instalación de Node.js y npm
Asegúrate de tener Node.js y npm instalados en tu sistema. Puedes comprobarlo ejecutando en tu terminal node --version y npm --version. Si ambos están instalados, mostrarán la versión de Node.js y npm respectivamente.
Paso 6: Implementa Breeze
A continuación, tendrás que configurar Breeze con el stack de Blade. Sigue los comandos indicados en la documentación de Laravel Breeze.
Paso 7: Prueba la autenticación
Después de instalar Breeze, inicia el servidor Laravel con php artisan serve y comprueba si puedes registrar un usuario e iniciar sesión con él.
Paso 8: Define las rutas y crea el controlador
Abre tu archivo routes/web.php y agrega al final las siguientes rutas:
use App\Http\Controllers\CheckController;
Route::get('/validar', [CheckController::class, 'formulario']);
Route::post('/validar', [CheckController::class, 'confirmar']);
Luego, crea un nuevo controlador llamado CheckController. Puedes hacerlo ejecutando el siguiente comando en la terminal:
php artisan make:controller CheckController
Ahora, entra CheckController y establece el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CheckController extends Controller
{
public function formulario() {
return view('insertar-dato');
}
public function confirmar(Request $request) {
$validated = $request->validate([
'dato' => 'required|integer|min:1|max:10'
]);
if ($validated) {
echo 'El dato es válido.';
}
}
}
Paso 9: Crea una vista con el formulario
Crea un archivo llamado insertar-dato.blade.php en la carpeta resources/views. Dentro de este archivo, puedes poner un formulario simple que permita a los usuarios introducir un dato.
Inicia el servidor Laravel con el comando php artisan serve y abre un navegador web. Visita la página /validar para ver el formulario que has creado. Introduce diferentes datos y presiona enviar para verificar si la validación funciona como se espera. Para ello, prueba con valores que cumplan con las reglas de validación, un entero entre 1 y 10, y también con aquellos que no las cumplan.
Ahora que ya tienes una introducción a cómo implementar una autenticación básica usando Laravel Breeze e implementar una validación sencilla en Laravel, es el momento de que refuerces lo aprendido. Modifica todo lo que puedas la aplicación web que has creado, establece nuevas reglas de validación y experimenta con Laravel Breeze.
Si quieres aprender más, te recomendamos que te adentres en la documentación oficial de Laravel sobre autenticación, Laravel Breeze y validación:
Documentación oficial de Laravel sobreautenticación.
Documentación oficial de Laravel sobre el kit de inicioBreeze.
Alba y Manuel, desarrolladores web en una empresa de medios, deciden implementar un nuevo sistema de gestión de publicaciones utilizando Laravel con Eloquent. Este sistema incorpora una autenticación de dos roles - usuario y administrador - y presenta una validación básica para los títulos y el cuerpo de las publicaciones.
Los usuarios con el rol de 'usuario' tienen la capacidad de agregar y editar sus propias publicaciones, pero no las de otros usuarios, y no poseen la autorización para borrar ninguna publicación, ni las suyas propias. Por otro lado, los usuarios con el rol de 'administrador' tienen permiso para agregar, editar y borrar cualquier publicación, incluso la de otros usuarios. La validación garantiza que tanto el título (máximo 255 caracteres) como el cuerpo (máximo 1000 caracteres) de la publicación sean obligatorios.
Desarrolla un sistema de rutas en Laravel para gestionar las publicaciones, que incluya las operaciones de indexación, creación, almacenamiento, visualización, edición, actualización y eliminación. Después, crea un controlador llamado PostController que maneje las solicitudes para cada ruta utilizando los métodos correspondientes. Este controlador interactuará con el modelo Post y el modelo User para realizar operaciones en la base de datos.
demás, configura rutas y métodos adicionales para manejar las vistas y acciones específicas de los usuarios y los administradores. Implementa la autenticación y la validación en las acciones pertinentes para garantizar que solo los usuarios y administradores autorizados puedan realizar ciertas operaciones, y que las publicaciones cumplan con los requisitos de validación.
El objetivo de este ejercicio es practicar cómo configurar y utilizar las rutas en Laravel, cómo implementar controladores para manejar las solicitudes, cómo operar en modelos con Eloquent y cómo implementar la autenticación y la validación en una aplicación web Laravel.
En la presente unidad de trabajo, se utilizan imágenes procedentes deUnsplash.
Unsplashconcede unalicenciairrevocable, no exclusiva y de alcance mundial para descargar, copiar, modificar, distribuir, ejecutar y utilizar las fotografías disponibles en su plataforma sin costo alguno, incluso para fines comerciales, sin requerir permiso ni atribución al fotógrafo o a Unsplash. No obstante, esta licencia no permite recopilar fotografías de Unsplash con el propósito de replicar un servicio similar o competidor.
Materiales desarrollados inicialmente por el Ministerio de Educación, Cultura y Deporte y actualizados por el profesorado de la Junta de Andalucía bajo licencia Creative Commons BY-NC-SA.
Antes de cualquier uso leer detenidamente el siguenteAviso legal
Ubicación: Varios Mejora (tipo 2): * Añadido contenido teórico de sembrado en Laravel en la sección 2.4.
* Añadido contenido teórico de middleware en Laravel en la sección 2.6 con Debes Conocer.
* Añadido contenido práctico de sembrado en Laravel en la sección 3.4.
* Añadida introducción en la sección 3.6.
* Completado algunos campos de Propiedades.
* Renombramiento de imágenes para tenerlo más organizado.
* Archivo SCORM generado con la nueva versión estándar para GestionaFP: eXeLearning 2.8.1.
Ubicación: Índice Mejora (Orientaciones del alumnado): Actualizado el índice según los nuevos contenidos.