Aplicacion web desarrollada con Laravel para practicar autenticacion, rutas, controladores, modelos, migraciones, vistas Blade y personalizacion de paginas de error.
El proyecto incluye modulos basicos para administrar productos y almacenes, usando Laravel AdminLTE como plantilla visual principal.
Ultima actualizacion: 25 de junio de 2026.
- PHP 8.3 o superior
- Laravel 13
- Composer
- Node.js y npm
- PostgreSQL
- Vite
- Bootstrap / Sass
- Laravel UI para autenticacion
- Laravel AdminLTE
- Diglactic Laravel Breadcrumbs
- Historial de commits y modulos:
docs/historial-proyecto.md - Datos de prueba SQL:
database/datos_prueba.sql
Antes de instalar el proyecto, verificar que estas herramientas esten instaladas y disponibles en el Path:
php -v
composer -V
node -v
npm -v
psql --versionLinks oficiales:
- PHP para Windows: https://www.php.net/downloads.php?os=windows
- Visual C++ Redistributable x64: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Composer: https://getcomposer.org/download/
- Node.js: https://nodejs.org/en/download
- PostgreSQL: https://www.postgresql.org/download/windows/
- Git para Windows: https://git-scm.com/install/windows
- Visual Studio Code: https://code.visualstudio.com/
Para PHP en Windows se recomienda descargar el ZIP VS17 x64 Non Thread Safe y agregar al Path la carpeta donde esta php.exe.
El archivo php.ini usado por la terminal debe tener activas estas extensiones:
extension=curl
extension=fileinfo
extension=mbstring
extension=openssl
extension=pdo_pgsql
extension=pgsql
extension=zipPara saber que php.ini esta usando PHP:
php --iniPara validar extensiones:
php -m | findstr fileinfo
php -m | findstr pgsqlSi una extension aparece comentada con ;, quitar el ;, guardar php.ini, cerrar la terminal y abrir una nueva.
- Registro, inicio y cierre de sesion con
Auth::routes(). - Recuperacion de contrasena por correo.
- Vista principal
/home. - CRUD basico de productos.
- CRUD basico de almacenes.
- Filtros de busqueda por codigo o nombre en productos y almacenes.
- Breadcrumbs para la navegacion interna.
- Paginas de error personalizadas en
resources/views/errors. - Imagenes para errores en
public/images/errors. - Ruta local para probar errores HTTP.
Rutas principales:
GET /productos
GET /producto/nuevo
GET /producto/editar/{id}
POST /producto/guardar
DELETE /producto/eliminar/{id}El listado permite buscar por una palabra contenida en codigo o nombre.
Campos del producto:
codigo
nombre
precio
impuesto
existenciaRutas principales:
GET /almacen
GET /almacen/nuevo
GET /almacen/editar/{id}
POST /almacen/guardar
DELETE /almacen/eliminar/{id}El listado permite buscar por una palabra contenida en codigo o nombre.
Campos del almacen:
codigo
nombreLas vistas de error estan en:
resources/views/errors/Se personalizaron paginas como:
401 - No autorizado
403 - Acceso prohibido
404 - Pagina no encontrada
419 - Sesion expirada
500 - Error del servidorLa plantilla base visual esta en:
resources/views/errors/minimal.blade.phpLas imagenes se guardan en:
public/images/errors/Para probar las paginas de error en desarrollo, existe la ruta local:
/error/{code}Ejemplos:
http://127.0.0.1:8000/error/401
http://127.0.0.1:8000/error/403
http://127.0.0.1:8000/error/404
http://127.0.0.1:8000/error/419
http://127.0.0.1:8000/error/500Esta ruta solo se registra cuando la aplicacion esta en entorno local.
Entrar a la carpeta del proyecto:
cd /d C:\Users\yrian\Documents\GitHub\8ids2Instalar dependencias de PHP y Node:
composer install
npm installCrear el archivo de entorno:
if not exist .env copy .env.example .envConfigurar PostgreSQL en .env:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=8ids2
DB_USERNAME=postgres
DB_PASSWORD=tu_passwordLa base indicada en DB_DATABASE debe existir en PostgreSQL antes de ejecutar migraciones. Se puede crear desde pgAdmin o desde CMD:
createdb -U postgres 8ids2Si ya se esta dentro de SQL Shell (psql), usar SQL en lugar del comando de CMD:
CREATE DATABASE "8ids2";El nombre va entre comillas porque empieza con numero. Para confirmar que la base existe:
\lGenerar la llave de la aplicacion:
php artisan key:generateEjecutar migraciones y seeders:
php artisan migrate --seedCompilar assets:
npm run buildLevantar el servidor local:
php artisan serveAbrir en el navegador:
http://127.0.0.1:8000Usuarios de prueba creados por el seeder:
admin@test.com / 12345678
almacen@test.com / 12345678
producto@test.com / 12345678Roles y permisos:
admin@test.com puede ver productos y almacenes
almacen@test.com puede ver almacenes
producto@test.com puede ver productosPara enviar correos reales de recuperacion de contrasena se puede usar Gmail por SMTP. La cuenta de Gmail debe tener activa la verificacion en 2 pasos y debe generarse una contrasena de aplicacion desde la cuenta de Google.
Configuracion recomendada en .env:
MAIL_MAILER=smtp
MAIL_SCHEME=null
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=tu_correo@gmail.com
MAIL_PASSWORD=contrasena_de_aplicacion_sin_espacios
MAIL_FROM_ADDRESS="tu_correo@gmail.com"
MAIL_FROM_NAME="${APP_NAME}"Notas importantes:
MAIL_USERNAMEyMAIL_FROM_ADDRESSson el correo que envia los mensajes.MAIL_PASSWORDno es la contrasena normal de Gmail, es la contrasena de aplicacion.- Si Google muestra la contrasena de aplicacion con espacios, guardarla en
.envsin espacios. - Los usuarios de prueba
@test.comsirven para iniciar sesion en local, pero no para recibir correos reales. - Para probar recuperacion de contrasena, usar un usuario cuyo correo exista de verdad en la tabla
users.
Despues de cambiar variables de correo, limpiar la configuracion:
php artisan config:clear
php artisan cache:clearRutas principales de recuperacion:
POST password/email
GET password/reset/{token}El proyecto incluye un archivo SQL con 50 productos y 10 almacenes de prueba:
database/datos_prueba.sqlPara cargarlo en PostgreSQL:
psql -U postgres -d 8ids2 -f database/datos_prueba.sqlEl archivo no borra registros existentes. Si se ejecuta mas de una vez, agregara datos duplicados.
Nota para PowerShell: si npm muestra un error por politicas de ejecucion de scripts, usar npm.cmd:
npm.cmd install
npm.cmd run buildAbrir una terminal para Laravel:
php artisan serveAbrir otra terminal para Vite:
npm.cmd run devEntrar en el navegador:
http://127.0.0.1:8000Si se usa CMD en lugar de PowerShell, tambien funciona:
npm run devPara borrar tablas, volver a ejecutar migraciones y cargar usuarios de prueba:
php artisan migrate:fresh --seedPara cargar tambien los 50 productos y 10 almacenes del SQL:
psql -U postgres -d 8ids2 -f database/datos_prueba.sqlSi el proyecto ya estaba en la computadora, no es necesario clonar de nuevo. Antes de correr migraciones, verificar que las herramientas y extensiones esten disponibles:
php -v
composer -V
node -v
npm -v
php -m | findstr fileinfo
php -m | findstr pgsqlSi composer install falla con errores de clases faltantes dentro de vendor, reconstruir las dependencias PHP desde composer.lock:
rmdir /s /q vendor
composer clear-cache
composer installSi npm install falla por paquetes anteriores, reconstruir las dependencias de Node desde package-lock.json:
rmdir /s /q node_modules
npm installNo borrar composer.lock ni package-lock.json salvo que se quiera actualizar versiones de dependencias de forma intencional.
Si PowerShell muestra php : El termino 'php' no se reconoce, Windows no esta encontrando php.exe.
Verificar donde esta instalado PHP y agregar al Path la carpeta que contiene php.exe, por ejemplo:
C:\Users\usuario\OneDrive\Documents\php\php-8.x.x-nts-Win32-vs17-x64Cerrar PowerShell, abrir una nueva terminal y validar:
php -vSi PHP esta dentro de OneDrive, revisar que el Path use la ruta completa con OneDrive\Documents y no solo Documents.
PowerShell puede bloquear npm.ps1 por politicas de ejecucion. Usar:
npm.cmd install
npm.cmd run build
npm.cmd run devSi aparece un error similar a Interface "PHPUnit\Event\Application\StartedSubscriber" not found, regenerar el autoload:
composer dump-autoload -o --no-scripts
php artisan package:discover
composer installSi el problema continua, reconstruir vendor:
rmdir /s /q vendor
composer clear-cache
composer installSi SQL Shell muestra el sistema de base de datos esta en modo de recuperacion, esperar un minuto e intentar otra vez. Si continua, reiniciar el servicio desde services.msc:
postgresql-x64-18
postgresql-x64-17
postgresql-x64-16El nombre exacto depende de la version instalada.
Para trabajar con Vite en modo desarrollo:
npm run devEn otra terminal se puede mantener Laravel activo:
php artisan serveTambien existe el script combinado:
composer run devapp/Http/Controllers/
app/Models/
database/migrations/
public/images/errors/
resources/views/
resources/views/errors/
routes/web.php
routes/breadcrumbs.phpYoshiro Pablo Armando Riano Ishiwara