Skip to content

Macro Route::crud() 🛣️

En una arquitectura Fullstack moderna orientada a componentes dinámicos, el estándar Route::resource() de Laravel se queda corto: no contempla el endpoint /schema, no incluye las acciones de recuperación de papelera (Soft Deletes) y suele causar problemas al subir archivos con PUT vía FormData.

SchemaBuilder registra automáticamente la macro Route::crud() en el Router de Laravel para resolver este problema en una sola línea de código.


⚡ Registro en Una Sola Línea

En tu archivo routes/api.php:

php
use App\Http\Controllers\Api\UserController;
use Illuminate\Support\Facades\Route;

Route::prefix('v1')->middleware('auth:sanctum')->group(function () {
    // Registra automáticamente las 8 rutas del ecosistema CRUD
    Route::crud('users', UserController::class);
});

📋 Las 8 Rutas Generadas Automáticamente

La macro expande de inmediato las siguientes rutas optimizadas con sus nombres canónicos:

Verbo HTTPURIAcción del ControladorNombre de la RutaPropósito
GET/v1/users/schemaUserController@schemav1.users.schemaEntrega la metadata unificada al frontend.
GET/v1/usersUserController@indexv1.users.indexListado paginado con filtros y búsqueda.
POST/v1/usersUserController@storev1.users.storeCreación de un nuevo recurso.
GET/v1/users/{id}UserController@showv1.users.showConsulta o inspección de un registro.
PATCH | PUT | POST/v1/users/{id}UserController@updatev1.users.updateActualización con soporte de archivos.
DELETE/v1/users/{id}UserController@destroyv1.users.destroyEliminación suave (Soft Delete).
POST/v1/users/{id}/restoreUserController@restorev1.users.restoreRestauración desde la papelera.
DELETE/v1/users/{id}/forceUserController@forceDeletev1.users.forceDeletePurga o eliminación definitiva física.

🎯 Ventajas Clave sobre Route::resource()

1. Soporte Nativo para Formularios con Archivos (multipart/form-data)

PHP nativo no procesa correctamente cargas de archivos multipart enviadas mediante verbos PUT directos. Por esta razón, la ruta de actualización de Route::crud() acepta match(['put', 'patch', 'post']), permitiendo que clientes frontend envíen un POST con _method=PUT o directamente a la misma URL sin bloqueos del servidor.

2. Ciclo de Vida Completo de Papelera (Soft Deletes)

Al activar la pestaña de papelera en tu TableSchema con softDeletes(), el frontend envía solicitudes a {id}/restore o {id}/force. Con Route::crud(), estas rutas ya están conectadas y disponibles sin tener que agregarlas manualmente a cada entidad.

3. Nombres de Rutas Consistentes

Los nombres de las rutas se normalizan automáticamente reemplazando barras diagonales por puntos (ej. admin/products genera admin.products.index, admin.products.schema, etc.).

Liberado bajo la Licencia MIT.