Funcionalidad completa en Laravel: migración, policy, controlador y tests
Implementa una funcionalidad de Laravel de principio a fin: migración, modelo, Form Request, Policy, controlador, rutas y tests de Pest o PHPUnit, sin N+1. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 5 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como desarrollador PHP senior especializado en Laravel y en código mantenible.
Necesito implementar esta funcionalidad en una aplicación Laravel {{version_laravel}}: {{funcionalidad}}.
- Entidades y relaciones: {{entidades}}
- Roles y permisos: {{roles}}
- Framework de tests: {{tests}}
Entregables, en este orden:
1. Resumen del diseño: tablas, relaciones Eloquent, rutas y qué capa hace cada cosa (controlador, Form Request, Policy, acción o servicio).
2. Migraciones con claves foráneas, índices y `onDelete` explícito, más los modelos con `$fillable` o `$guarded`, `casts` y relaciones.
3. Form Requests con reglas de validación y mensajes en el idioma de la app.
4. Policy registrada y usada con `authorize` o middleware `can`, cubriendo cada rol.
5. Controlador delgado (resource o de acción única) que delegue la lógica de negocio en una clase de acción, con `DB::transaction` donde haya varias escrituras.
6. Rutas con nombres, middleware y route model binding.
7. Respuesta: API Resource si es una API, o vistas Blade mínimas si es web. Carga ansiosa (`with`) para evitar consultas N+1.
8. Factories y tests de feature: caso feliz, validación fallida, usuario sin permiso (403) y recurso ajeno.
9. Comandos Artisan para generar los archivos y ejecutar los tests.
Restricciones:
- Sigue las convenciones de Laravel y PSR-12; nada de lógica en las rutas.
- No inventes columnas, roles ni reglas: pregúntame si falta algo o usa [COMPLETAR].
- Si la versión elegida cambia algo (por ejemplo, la estructura de `bootstrap/app.php`), indícalo.
Formato: un bloque de código por archivo con su ruta y una lista final de pasos para integrarlo.Cómo usarlo
- Describe la funcionalidad como una historia de usuario con sus reglas.
- Indica las tablas que ya existen para que no se dupliquen.
- Genera los archivos con Artisan, pega el código y ejecuta los tests.
- Revisa la Policy con cada rol antes de desplegar.
Ejemplo de uso
Funcionalidad: los clientes solicitan presupuestos y los comerciales los aprueban · Entidades: Cliente, Presupuesto, LíneaPresupuesto · Laravel 11 · Pest.
Resultado de ejemplo
4. Policy — app/Policies/QuotePolicy.php
<?php
namespace App\Policies;
use App\Enums\QuoteStatus;
use App\Models\Quote;
use App\Models\User;
class QuotePolicy
{
// El admin puede hacerlo todo; null deja decidir al resto de métodos
public function before(User $user): ?bool
{
return $user->isAdmin() ? true : null;
}
public function view(User $user, Quote $quote): bool
{
return $user->isSalesRep() || $quote->customer->user_id === $user->id;
}
public function create(User $user): bool
{
return $user->isCustomer();
}
public function approve(User $user, Quote $quote): bool
{
return $user->isSalesRep() && $quote->status === QuoteStatus::Pending;
}
}
En Laravel 11 la Policy se descubre automáticamente si sigue la convención App\Models\Quote → App\Policies\QuotePolicy; no hace falta registrarla en un AuthServiceProvider.
Integración
php artisan make:policy QuotePolicy --model=Quote- En el controlador:
Gate::authorize('approve', $quote); - Test Pest: un cliente que intenta aprobar recibe 403; un cliente que abre el presupuesto de otro, también.
- Los métodos
isAdmin(),isSalesRep()eisCustomer()dependen de cómo guardes los roles → [COMPLETAR]…
Datos clave
- Categoría
- Programación y desarrollo · PHP
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Funcionalidad, Entidades y relaciones, Roles y permisos, Versión de Laravel y Framework de tests
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Por qué usar una clase de acción en vez de poner todo en el controlador?
Porque la lógica queda reutilizable desde comandos, jobs o tests y el controlador solo traduce HTTP. Además, es más fácil probarla de forma aislada.
¿Cómo detecto consultas N+1 en el código generado?
Activa `Model::preventLazyLoading()` en entornos que no sean de producción: Laravel lanzará una excepción si alguna relación se carga de forma perezosa.
¿Para qué sirve este prompt?
Implementa una funcionalidad de Laravel de principio a fin: migración, modelo, Form Request, Policy, controlador, rutas y tests de Pest o PHPUnit, sin N+1.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Funcionalidad, Entidades y relaciones, Roles y permisos, Versión de Laravel y Framework de tests). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.