amptech/laravel-blade-scaffold
| Install | |
|---|---|
composer require amptech/laravel-blade-scaffold |
|
| Latest Version: | 1.0.0 |
| PHP: | ^7.4|^8.0|^8.1|^8.2|^8.3 |
| License: | MIT |
| Last Updated: | Jan 12, 2026 |
| Links: | GitHub · Packagist |
Laravel Blade Scaffold
Generador automático de vistas CRUD Blade para Laravel con componentes reutilizables y detección inteligente de tipos de campo.
✨ Características
- 🚀 Generación automática de vistas CRUD completas (index, create, edit, show, form)
- 🧠 Detección inteligente de tipos de campo basada en nombres
- 🔗 Soporte para Foreign Keys con generación automática de selects
- 🎨 Componentes Blade reutilizables listos para usar
- 💅 Diseño moderno con Tailwind CSS
- ⚙️ Altamente personalizable - publica y modifica templates
- 🔍 Validación interactiva antes de sobrescribir archivos
- 📦 Compatible con Laravel 8, 9, 10, 11
📦 Instalación
composer require amptech/laravel-blade-scaffold
Publicar Assets
# Publicar todo (templates y components)
php artisan vendor:publish --tag=blade-scaffold
# Solo templates
php artisan vendor:publish --tag=blade-scaffold-templates
# Solo components
php artisan vendor:publish --tag=blade-scaffold-components
Nota: El comando te preguntará automáticamente si deseas publicar los assets la primera vez que lo ejecutes.
🚀 Uso
Comando Básico
php artisan make:form User
El comando te preguntará en qué ruta deseas crear las vistas. Por defecto usa forms.
Ejemplos de Uso
# Especificar ruta personalizada
php artisan make:form Product --path=admin/products
# Generar solo algunas vistas específicas
php artisan make:form User --only=index,form
# Excluir vistas específicas
php artisan make:form Post --exclude=show,edit
# Forzar sobrescritura sin confirmación
php artisan make:form Category --force
📋 Vistas Generadas
El comando genera automáticamente:
| Vista | Descripción |
|---|---|
index.blade.php |
Listado con tabla de registros y paginación |
create.blade.php |
Formulario para crear nuevo registro |
edit.blade.php |
Formulario para editar registro existente |
show.blade.php |
Vista de detalle del registro |
forms/form.blade.php |
Formulario reutilizable compartido |
Estructura Generada
resources/views/
└── {ruta-especificada}/
├── index.blade.php
├── create.blade.php
├── edit.blade.php
├── show.blade.php
└── forms/
└── form.blade.php
🎨 Características Avanzadas
✅ Detección Automática de Campos
El paquete detecta automáticamente los campos fillable de tu modelo:
class Product extends Model
{
protected $fillable = [
'name',
'description',
'price',
'category_id',
'is_active',
'stock',
'email'
];
}
✅ Inferencia Inteligente de Tipos
Detecta automáticamente el tipo de campo según el nombre:
| Patrón en el nombre | Tipo de campo generado |
|---|---|
email |
<input type="email"> |
password, pass |
<input type="password"> |
phone, tel |
<input type="tel"> |
url, link, website |
<input type="url"> |
date, born, birth |
<input type="date"> |
time |
<input type="time"> |
price, amount, cost, age |
<input type="number"> |
description, content, body, text |
<textarea> |
status, type, category, role |
<select> |
active, enabled, published |
<checkbox> |
*_id |
<select> con foreign key |
✅ Soporte para Foreign Keys
Detecta automáticamente campos con _id y genera selects con relaciones:
// Campo: category_id en el modelo Product
// Genera automáticamente:
<x-inputs.select name="category_id" label="Category">
<option value="">{{ __('Select...') }}</option>
@foreach($categories as $category)
<option value="{{ $category->id }}">
{{ $category->name }}
</option>
@endforeach
</x-inputs.select>
Importante: Debes pasar la variable $categories desde tu controlador:
public function create()
{
$categories = Category::all();
return view('products.create', compact('categories'));
}
🎨 Componentes Blade Incluidos
El paquete incluye componentes reutilizables listos para usar:
<x-form-group>
Contenedor para campos de formulario con espaciado consistente.
<x-form-group>
<!-- Tu campo aquí -->
</x-form-group>
<x-label-group>
Grupo de etiqueta con descripción (ideal para vistas de detalle).
<x-label-group
label="Product Name"
description="{{ $product->name }}"
/>
<x-inputs.input>
Input de texto con validación y estilos.
<x-inputs.input
name="name"
type="text"
label="Product Name"
value="{{ old('name', $product->name ?? '') }}"
required
/>
<x-inputs.textarea>
Área de texto con validación.
<x-inputs.textarea
name="description"
label="Description"
rows="4"
value="{{ old('description', $product->description ?? '') }}"
/>
<x-inputs.select>
Select dropdown con opciones.
<x-inputs.select name="category_id" label="Category" required>
<option value="">Select...</option>
@foreach($categories as $category)
<option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
</x-inputs.select>
<x-inputs.checkbox>
Checkbox estilizado.
<x-inputs.checkbox
name="is_active"
label="Active"
value="1"
:checked="old('is_active', $product->is_active ?? false)"
/>
🎯 Ejemplos Completos
Ejemplo 1: CRUD de Productos
1. Crear el modelo:
php artisan make:model Product -m
2. Definir fillable:
// app/Models/Product.php
protected $fillable = [
'name',
'description',
'price',
'category_id',
'is_active'
];
3. Generar vistas:
php artisan make:form Product --path=admin/products
4. Crear controlador:
php artisan make:controller Admin/ProductController --resource
5. Definir rutas:
// routes/web.php
Route::resource('admin/products', Admin\ProductController::class);
Ejemplo 2: Solo Listado y Formulario
php artisan make:form Product --path=products --only=index,form
Genera solo:
resources/views/products/index.blade.phpresources/views/products/forms/form.blade.php
Ejemplo 3: Sin Vista de Detalle
php artisan make:form Post --path=blog/posts --exclude=show
Genera todas las vistas excepto show.blade.php.
🔧 Personalización
Modificar Templates
Publica los templates y personalízalos según tus necesidades:
php artisan vendor:publish --tag=blade-scaffold-templates
Los templates se copiarán a:
resources/views/vendor/blade-scaffold/templates/
├── index.blade.php
├── create.blade.php
├── edit.blade.php
├── show.blade.php
└── form.blade.php
Modificar Components
Publica los componentes y personalízalos:
php artisan vendor:publish --tag=blade-scaffold-components
Los componentes se copiarán a:
resources/views/components/
├── form-group.blade.php
├── label-group.blade.php
└── inputs/
├── input.blade.php
├── textarea.blade.php
├── select.blade.php
└── checkbox.blade.php
Ejemplo de Personalización
Una vez publicados, puedes modificar cualquier template. Por ejemplo, para cambiar el diseño de index.blade.php:
<!-- resources/views/vendor/blade-scaffold/templates/index.blade.php -->
<x-app-layout>
<!-- Tu diseño personalizado aquí -->
</x-app-layout>
💡 Tips y Mejores Prácticas
1. Define los campos fillable
Asegúrate de definir los campos fillable en tu modelo para mejor detección:
protected $fillable = ['name', 'email', 'phone', 'is_active'];
2. Usa nombres descriptivos
Los nombres de campos descriptivos permiten mejor inferencia de tipos:
✅ Bueno: birth_date, is_active, description
❌ Malo: date1, flag, text
3. Personaliza los templates
Publica los templates y modifícalos según tu diseño corporativo:
php artisan vendor:publish --tag=blade-scaffold-templates
4. Recuerda pasar variables para foreign keys
Para campos *_id, debes pasar las relaciones desde el controlador:
public function create()
{
$categories = Category::all();
$brands = Brand::all();
return view('products.create', compact('categories', 'brands'));
}
5. Usa la opción --force en desarrollo
Durante el desarrollo, usa --force para sobrescribir rápidamente:
php artisan make:form Product --force
🛠 Troubleshooting
No se generan vistas
Problema: El modelo no existe.
Solución:
php artisan make:model Product -m
Templates no encontrados
Problema: Los templates no están publicados.
Solución:
php artisan vendor:publish --tag=blade-scaffold-templates
Components no funcionan
Problema: Los componentes no están publicados.
Solución:
php artisan vendor:publish --tag=blade-scaffold-components
Error: "Class not found"
Problema: Autoload de Composer no está actualizado.
Solución:
composer dump-autoload
Los estilos no se aplican
Problema: Tailwind CSS no está configurado.
Solución:
- Asegúrate de tener Tailwind CSS instalado
- Verifica que los componentes usen las clases de Tailwind
- Ejecuta
npm run devpara compilar los assets
📋 Opciones del Comando
| Opción | Descripción | Ejemplo |
|---|---|---|
--path |
Ruta personalizada para las vistas | --path=admin/products |
--only |
Generar solo vistas específicas | --only=index,form |
--exclude |
Excluir vistas específicas | --exclude=show,edit |
--force |
Forzar sobrescritura sin confirmación | --force |
📝 Requisitos
- PHP: ^7.4 | ^8.0 | ^8.1 | ^8.2 | ^8.3
- Laravel: ^8.0 | ^9.0 | ^10.0 | ^11.0
- Tailwind CSS: Recomendado (pero puedes personalizar)
🤝 Contribuir
¡Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Guías para Contribuir
- Mantén el código limpio y documentado
- Sigue las convenciones de Laravel
- Agrega tests para nuevas funcionalidades
- Actualiza el CHANGELOG.md
🔄 Changelog
Consulta el archivo CHANGELOG.md para ver todos los cambios.
📄 Licencia
Este paquete es software de código abierto bajo la Licencia MIT.
👤 Autor
Oscar Amperez
- Email: oamperezp@gmail.com
- GitHub: @oamperezp
🔗 Links
🙏 Agradecimientos
- Gracias a la comunidad de Laravel
- Inspirado por Laravel Generators y otros paquetes similares
- Diseño basado en Tailwind CSS y Laravel Jetstream
⭐ ¿Te gusta este paquete?
Si este paquete te ayuda, considera:
- ⭐ Darle una estrella en GitHub
- 🐛 Reportar bugs o sugerir mejoras
- 💬 Compartirlo con la comunidad
- ☕ Invitarme un café
📊 Estado del Proyecto
¡Desarrollado con ❤️ para la comunidad Laravel!