Controlador de Recurso (Resource Controller)
Con Laravel crear un controlador que tenga todos los métodos necesarios para un CRUD es muy simple, gracias a la consola interactiva se puede crear con este simple comando:
php artisan make:controller UserController --resource
Además de crear un controlador para un CRUD, se puede asociar el controlador a un modelo añadiendo la opción model al comando anterior de esta forma:
php artisan make:controller UserController --resource --model=User
En Laravel 10, para crear una ruta resource que gestione un recurso de manera estándar (con los métodos típicos: index, create, store, show, edit, update y destroy), puedes definirlo en el archivo de rutas (routes/web.php o routes/api.php) de la siguiente manera:
use App\Http\Controllers\PostController;
Route::resource('posts', PostController::class);
Esto generará automáticamente las siguientes rutas:
| Método HTTP | URI | Acción | Método del controlador |
| GET | /posts | index | PostController@index |
| GET | /posts/create | create | PostController@create |
| POST | /posts | store | PostController@store |
| GET | /posts/{post} | show | PostController@show |
| GET | /posts/{post}/edit | edit | PostController@edit |
| PUT/PATCH | /posts/{post} | update | PostController@update |
| DELETE | /posts/{post} | destroy | PostController@destroy |
Personalizar rutas específicas
// Solo las rutas index y show
Route::resource('posts', PostController::class)->only(['index', 'show']);
// Todas las rutas excepto destroy
Route::resource('posts', PostController::class)->except(['destroy']);
Controlador para API
Si estás construyendo una API y deseas generar rápidamente un controlador de recursos que no incluya los métodos de create y edit, utiliza la opción –api del comando make:controller
php artisan make:controller Api/UserController --api
Para hacer referencia a este controlador desde las rutas puedes llamar al método apiResource, este método cumple la misma función que el método resource que vimos anteriormente pero excluye los métodos create y edit.
Nota: Verificar si funciona para Laravel 10 en adelante.
Route::apiResource('users', 'UserController');
Si tienes otros controladores para recursos tipo API puedes utilizar el mismo método para añadir varios pasando un arreglo como argumento de esta forma