Controladores¶
Los controladores son el lugar perfecto para definir la lógica de negocio de nuestra aplicación o sitio web. Hace de intermediario entre la vista (lo que vemos con nuestro navegador o cliente) y el servidor donde la app está alojada.
Por defecto, los controladores se guardan en una carpeta específica situada en app/Http/Controllers
y tienen extensión .php
.
Creación¶
Para crear un controlador nuevo debemos hacer uso de nuestro querido autómata artisan
donde le diremos que cree un controlador con el nombre que nosotros queramos.
Abrimos la consola y nos situamos en la raíz de nuestro proyecto
php artisan make:controller PagesController
PagesController.php
con una estructura básica de controlador, dentro de la carpeta Controllers
que hemos descrito anteriormente.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PagesController extends Controller
{
//
}
Este controlador hereda de la clase base Controller
, lo que nos permitirá ir añadiendo métodos personalizados para gestionar las distintas vistas o acciones que nuestra aplicación necesite.
Uso¶
Ahora podemos modificar nuestro archivo de rutas web.pbp
para dejarlo limpio de lógica y trasladar ésta a nuestro nuevo controlador. La idea de ésto es dejar el archivo web.php
tan limpio como podamos para que, de un vistazo, se entienda todo perfectamente.
Info
Sólo movemos la lógica, mientras que las cláusulas como where
y name
las seguimos dejando en el archivo de rutas web.php
Veamos cómo quedaría un refactor del archivo de rutas utilizando un Controller
como el que acabamos de crear:
<?php
use App\Http\Controllers\PagesController;
use Illuminate\Support\Facades\Route;
Route::get('/', [ PagesController::class, 'inicio' ]);
Route::get('datos', [ PagesController::class, 'datos' ]);
Route::get('cliente/{id?}', [ PagesController::class, 'cliente' ]) -> where('id', '[0-9]+');
Route::get('nosotros/{nosotros?}', [ PagesController::class, 'nosotros']) -> name('nosotros');
y en nuestro archivo controlador lo dejaríamos de la siguiente manera
<?php
namespace App\Http\Controllers;
class PagesController extends Controller
{
public function inicio() { return view('welcome'); }
public function datos() {
return view('usuarios', ['id' => 56]);
}
public function cliente($id = 1) {
return ('Cliente con el id: ' . $id);
}
public function nosotros($nombre = null) {
$equipo = [
'Paco',
'Enrique',
'Maria',
'Veronica'
];
return view('nosotros', @compact('equipo', 'nombre'));
}
}
Controladores resource
¶
Un controlador resource en Laravel es un tipo especial de controlador que sigue una convención estándar para gestionar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre un recurso determinado. Al crear un controlador resource
, Laravel define de forma anticipada una serie de métodos que representan las acciones más comunes sobre un recurso (como un modelo o entidad). Estos métodos son:
index()
– Mostrar un listado del recurso.create()
– Mostrar el formulario para crear un nuevo recurso.store()
– Almacenar un nuevo recurso en la base de datos.show($id)
– Mostrar un recurso específico.edit($id)
– Mostrar el formulario para editar un recurso existente.update(Request $request, $id)
– Actualizar un recurso en la base de datos.destroy($id)
– Eliminar un recurso.
Este enfoque ahorra tiempo y mantiene una estructura clara y coherente dentro del proyecto.
Laravel permite generar este tipo de controlador automáticamente mediante el comando make:controller
con la opción --resource
. Un ejemplo sería
php artisan make:controller PhotoController --resource
Este comando generará un controlador en app/Http/Controllers/PhotoController.php
. El controlador contendrá un método para cada uno de los recursos disponibles. A continuación, puedes registrar una ruta de recursos que apunte al controlador:
<?php
use App\Http\Controllers\PhotoController;
Route::resource('photos', PhotoController::class);
Esta única declaración de ruta crea múltiples rutas para manejar una variedad de acciones en el recurso. El controlador generado ya tendrá métodos para cada una de estas acciones. Recuerda, siempre puedes obtener una visión rápida de las rutas de tu aplicación ejecutando el comando route:list
de artisan
.
Método | URI | Acción | Nombre de la ruta |
---|---|---|---|
GET | /photos | index | photos.index |
GET | /photos/create | create | photos.create |
POST | /photos | store | photos.store |
GET | /photos/{photo} | show | photos.show |
GET | /photos/{photo}/edit | edit | photos.edit |
PUT/PATCH | /photos/{photo} | update | photos.update |
DELETE | /photos/{photo} | destroy | photos.destroy |
No olvides consultar la documentación para profundizar más en los controladores de Laravel.
Actividades¶
-
AC 708 . (RA8 / CE8c CE8d CE8g / IC1 / 3p) - Genera el controlador de tareas para tu proyecto de listado de tareas iniciado en AC 705.
-
AR 709. (RA8 / CE8c CE8d CE8g / IC1 / 3p) - Genera los controladores necesarios para la gestión de un blog. Estos deben incluir, al menos, usuario, categorías y post.
-
PR 710. (RA8 / CE8c CE8d CE8g / IC2 / 5p) - Siguiendo con la solución de e-commerce, necesitas gestionar y crear todos los controladores que te puedan hacer falta a la hora de hacer uso de ella. Deja la parte de pago fuera, pues otro equipo hará su integración.
Aprende de los grandes
Date una vuelta por tu tienda favorita e imagina los controladores que se pueden estar usando. Una buena idea es la de ir mirando las rutas e intentar copiar su arquitectura. Recuerda que siempre debe haber alguien que la pueda administrar. Puede darse el caso que un controlador esté en el frontal y en la administración si hay tareas diferentes, por ejemplo uno pensado en mostrar información y el otro en la gestión.