Controladores en Laravel 9, ¿Qué son? ¿Para qué sirven?
Laravel es un Framework PHP basado en la arquitectura MVC (Modelo - Vista - Controlador). Un controlador se encarga de comunicar la vista con el modelo de nuestra aplicación Laravel manejando las peticiones procedentes de nuestras rutas(routes). Estos controladores en Laravel se almacenan en el directorio app/Http/Controllers
. Todos los controladores que creemos mediante Artisan se almacenarán en este directorio.
En este artículo explicaremos la creación y uso de estos controladores mediante la realización de un ejercicio práctico, además explicaremos los controladores --resource que nos permitirán crear facilmente un CRUD para nuestra aplicación, otro punto importante que trataremos será la inyección de dependencias en estos controladores y por último explicaremos las características más importantes de los controladores en Laravel.
Índice
Creación y uso de controladores básicos en Laravel
Podemos crear nuestros controladores básicos mediante el siguiente comando:
php artisan make:controller NombreController
De acuerdo a la convención de nomenclatura de Laravel tienes que especificar el nombre de tu controlador donde poner ‘Nombre’ seguido de ‘Controller’ para cualquiera de tus controladores.
Ejemplo de creación y uso de un controlador básico en Laravel
Vamos a crear un controlador llamado >EjemploController
que retornará una vista Laravel Blade para ello hacemos lo siguiente:
1º Creamos el controlador EjemploController mediante Laravel Artisan:
php artisan make:controller EjemploController
Como vimos anteriormente este comando creará un archivo en el directorio app/Http/Controllers
que se llamará EjemploController
. Accediendo al controlador veremos que es una clase con el mismo nombre.
2º Preparar controlador EjemploController
Una vez hemos creado el controlador el siguiente paso es modificarlo para que nos devuelva la vista que vamos a mostrar al usuario, para ello abrimos nuestro controlador y modificamos el archivo:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class EjemploController extends Controller
{
public function index() {
return view(‘ejemplo’);
}
}
3º Preparar la vista que vamos a mostrar al usuario
Ya tenemos el controlador preparado para mostrar la vista Laravel Blade, con lo que lo siguiente que deberemos hacer será crearla y prepararla con la información que queramos mostrar. Vamos al directorio resources/views
y creamos un archivo que se llame ejemplo.blade.php
y lo editamos con la siguiente información:
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo</title>
<style>
h1 {
color: green;
}
</style>
</head>
<body>
<h1>Ejemplo de prueba de controladores</h1>
<h3>¡Esta funcionando!</h3>
</body>
</html>
4º Asignar Ruta al controlador
Para poder llamar a nuestro controlador que va a cargar la vista deberemos crear una ruta GET
. Vamos al directorio routes
y abrimos el archivo web.php
. Una vez tenemos el archivo abierto creamos la ruta get:
Laravel 9 y posterior:
Route::get('ejemplo', [EjemploController::class, 'index']);
Versiones inferiores a Laravel 9
Route::get('ejemplo', 'EjemploController@index');
5º Ejecutar la aplicación y probar ruta
Una vez hemos hechos los pasos anteriores solo nos queda probar, para ello ejecutamos nuestra aplicación y vamos a la ruta creada.
php artisan serve
Abrimos nuestro navegador favorito y vamos a la url (En mi caso localhost:8000/ejemplo
). Como podemos ver si hemos realizado correctamente los pasos anteriores veremos la vista creada
Controladores Resource en Laravel
Habitualmente cuando creamos una aplicación en Laravel, necesitamos realizar Operaciones CRUD (Create, Read, Update, Delete). Con Laravel tenemos la facilidad de que con un simple comando con Laravel Artisan podemos crear un controlador con las funciones preparadas para el CRUD y además con una única línea de código podemos crear una ruta que pueda registrar todos los métodos de este CRUD.
Tomemos un ejemplo, queremos una aplicación con un CRUD de gestor de imágenes mediante Laravel:
1º Creamos un controlador ImageController con CRUD incluido
Creamos un controlador en Laravel mediante el comando que hemos usado anteriormente, pero si añadiendo --resource
, este añadido lo que hace es preparar todos los métodos para hacer el CRUD a nuestro gusto.
php artisan make:controller ImageController --resource
2º Creamos la ruta en web.php para CRUD
En lugar de tener que crear una ruta para cada método podemos crear una ruta que se asigne automáticamente a cada uno de los métodos del controlador creado anteriormente para ello abrimos web.php y creamos la siguiente ruta:
Laravel 9 y posterior:
Route::resource(images, [ImageController::class]);
Versiones inferiores a Laravel 9
Route::resource('images', 'ImageController');
Como podemos ver a través del siguiente comando tenemos todas las rutas sin tener que ir añadiéndolas una a una
php artisan route:list
Inyección de dependencias y controladores
La inyección de dependencias hace que nuestras aplicaciones web sean más fáciles de probar y mantener.
Constructor Injection
Laravel gestiona las dependencias de clase y resuelve todos los controladores. Tu controlador puede necesitar dependencias en el constructor, con Laravel, puedes escribir la mayoría de estas dependencias. El controlador de servicios de Laravel va a resolver todas las dependencias automáticamente y las inyectará posteriormente en la instancia del controlador.
<?php
namespace App\Http\Controllers;
use App\Repositories\UserRepository;
class MyController extends Controller
{
/**
* The user repository instance.
*/
protected $users;
/**
* Create a new controller instance.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
}
Method Injection
Aparte de inyectar dependencias en el constructor, también puedes inyectarlas en métodos de tu controlador. Por ejemplo, la instancia Illuminate\Http\Request
se puede inyectar en el método del controlador de la siguiente manera:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MyController extends Controller
{
/**
* Store a new user.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->name;
//
}
}
Características de los Controladores de Laravel
A continuación vas a ver algunas de las características de los controladores de Laravel:
-
- Soporte MVC: Como dijimos anteriormente Laravel está basado en la arquitectura MVC. El uso de esta arquitectura hace que el desarrollo de nuestras aplicaciones web sea más rápido ya que por ejemplo un programador pueda centrarse en la lógica y otro en la vista, por ejemplo. Además, Laravel soporte múltiples vistas para un modelo sin duplicación ya que la lógica de negocio está separada de la lógica de presentación.
-
- Authenticacion: Laravel incluye un sistema para la authenticacion con lo que solo tienes que ocuparte de otros aspectos como son la configuración de modelos, vistas y controladores.
-
- Seguridad: Como todos sabemos, la seguridad es el factor más importante a tener en cuenta durante el desarrollo de una aplicación. Laravel proporciona una gran seguridad gracias a sus sistema de seguridad incorado.
-
- Artisan: Como te habrás dado cuenta los comandos mediante Laravel Artisan nos permiten ahorrarnos mucho tiempo ya que nos ayuda a realizar tareas repetitivas sin que tengan que ser realizadas manualmente por nosotros.
-
- Plantillas: Gracias al innovador y potente motor de plantillas de Laravel (las vistas Blade) podemos crear aplicaciones web Dinámicas fácilmente.