| Install | |
|---|---|
composer require amptech/laravel-blade-scaffold |
|
| Latest Version: | 1.0.0 |
| PHP: | ^7.4|^8.0|^8.1|^8.2|^8.3 |
Generador automático de vistas CRUD Blade para Laravel con componentes reutilizables y detección inteligente de tipos de campo.
composer require amptech/laravel-blade-scaffold
# 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.
php artisan make:form User
El comando te preguntará en qué ruta deseas crear las vistas. Por defecto usa forms.
# 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
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 |
resources/views/
└── {ruta-especificada}/
├── index.blade.php
├── create.blade.php
├── edit.blade.php
├── show.blade.php
└── forms/
└── form.blade.php
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'
];
}
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 |
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'));
}
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)"
/>
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);
php artisan make:form Product --path=products --only=index,form
Genera solo:
resources/views/products/index.blade.phpresources/views/products/forms/form.blade.phpphp artisan make:form Post --path=blog/posts --exclude=show
Genera todas las vistas excepto show.blade.php.
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
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
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>
Asegúrate de definir los campos fillable en tu modelo para mejor detección:
protected $fillable = ['name', 'email', 'phone', 'is_active'];
Los nombres de campos descriptivos permiten mejor inferencia de tipos:
✅ Bueno: birth_date, is_active, description
❌ Malo: date1, flag, text
Publica los templates y modifícalos según tu diseño corporativo:
php artisan vendor:publish --tag=blade-scaffold-templates
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'));
}
Durante el desarrollo, usa --force para sobrescribir rápidamente:
php artisan make:form Product --force
Problema: El modelo no existe.
Solución:
php artisan make:model Product -m
Problema: Los templates no están publicados.
Solución:
php artisan vendor:publish --tag=blade-scaffold-templates
Problema: Los componentes no están publicados.
Solución:
php artisan vendor:publish --tag=blade-scaffold-components
Problema: Autoload de Composer no está actualizado.
Solución:
composer dump-autoload
Problema: Tailwind CSS no está configurado.
Solución:
npm run dev para compilar los assets| 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 |
¡Las contribuciones son bienvenidas! Por favor:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Consulta el archivo CHANGELOG.md para ver todos los cambios.
Este paquete es software de código abierto bajo la Licencia MIT.
Oscar Amperez
Si este paquete te ayuda, considera:
¡Desarrollado con ❤️ para la comunidad Laravel!