Controladores en Laravel

Controladores en Laravel

¡Hola, bienvenidos y bienvenidas al curso de Laravel 10! Continuando con el curso, hoy veremos qué son los Controladores en Laravel (Controllers).

¡Empecemos!

¿Qué son los controladores en Laravel?

Los controladores en Laravel son clases que se utilizan para manejar las solicitudes HTTP y coordinar la lógica de la aplicación. Los controladores ayudan a mantener el código limpio y organizado, siguiendo el patrón de diseño Modelo-Vista-Controlador (MVC). Se encarga de realizar la lógica del negocio y controles necesarios de las solicitudes.

Desplegar tu proyecto Laravel a producción

Adquiere la guía en formato PDF

Métodos en controladores Laravel

Se puede crear los controladores en laravel para que cumplan un objetivo en específico. Los comandos más utilizados para crear un controlador son los siguientes:

Controladores básicos

Los controladores básicos son los más comunes, al ejecutar el comando crea un controlador vacío, sin ningún método.

php artisan make:controller NombreControlador

Controladores de Recursos

Los controladores de recursos en Laravel, crea un controlador con las operaciones de un CRUD.

php artisan make:controller NombreControlador –resource

Controladores de API

Los controladores de API son diseñados para gestionar solicitudes y respuestas de API. 

php artisan make:controller NombreControlador –api

Controladores de tareas programadas

Los controladores de tareas programadas crean un controlador con un solo método que permite definir la lógica que se ejecutará.

php artisan make:controller NombreControlador –invokable

Crear controlador en Laravel (Controller)

Para crear un controlador en Laravel utilizaremos los comandos de Artisan, para nuestro ejemplo crearemos el controlador “AlumnoController”. Podemos utilizar la opción “resource” (este recurso creará las funciones básicas de manejo de las solicitudes HTTP como  index, create, store, show, edit, update y destroy). Escribimos el siguiente comando:

php artisan make:controller AlumnoController –resource
Crear controlador en Laravel

Esto generará un nuevo clase controlador en el directorio “app/Http/Controllers” con el nombre “AlumnoController”. Esta clase se extiende de la clase base Controller, que proporciona métodos y variables para un mejor funcionamiento.

Controlador resource Laravel

Inyección de dependencias en controladores Laravel

La inyección de dependencias es un patrón de diseño utilizado en programación orientada a objetos. La inyección de dependencias en controladores Laravel, se utiliza ampliamente en el sistema de contenedor de servicios para resolver y administrar las dependencias de una clase de manera automática.

En lugar de instanciar manualmente las dependencias dentro de una clase, En Laravel las dependencias son declaradas e inyectadas dentro de un constructor para ser llamadas desde cualquier método de la clase.

Lo primero que haremos es llamar a la referencia de la clase “AlumnoRepository” que creamos en la anterior clase.

use App\Repositories\AlumnoRepository;

Creamos el constructor para inyectar la dependencia de la clase “AlumnoRepository” para utilizarlo en los métodos de la clase del controlador.

protected $alumnos;

public function __construct(AlumnoRepository $alumnos)
{
    $this->alumnos = $alumnos;
}

Crear Controladores de recursos en Laravel (Resource)

Ahora trabajaremos el controlador de recursos de Laravel que nos ofrece  las funciones básicas de un CRUD, el comando “resource” (contendrá un método para cada una de las operaciones de recursos disponibles).

Método index

Con el método “index” es donde mostraremos el listado de todos los alumnos. Con la inyección de dependencias podemos acceder a los métodos de la clase “AlumnoRepository”, al llamar el método  “obtenerAlumnos” retorna un listado con todos los registros de la tabla “Alumnos” que se encuentran en la base de datos, para posteriormente enviarlos a la vista.

public function index()
{
    $alumnos = $this->alumnos->obtenerAlumnos();
    return view('alumnos.lista', ['alumnos' => $alumnos]);
}

Método crear (create)

El método “create” redirecciona a una vista donde crearemos un formulario para registrar  nuevos alumnos.

public function create()
{
    return view('alumnos.crear');
}

Método guardar (store)

El método “store” almacena un nuevo alumno, la variable $request contiene todos los datos del formulario de la petición HTTP. El método “InsertarAlumnos” se encargará de registrar el nuevo alumno. Por último, retorna a la vista del listado de alumnos.

public function store(Request $request)
{
    $this->alumnos->InsertarAlumnos($request);
    return redirect()->action([AlumnoController::class, 'index']);
}

Método ver (show)

El método “show” obtiene un alumno específico y redirecciona a un formulario de la vista. El método “obtenerAlumnoPorId” retorna un registro de la base de datos que cumpla con un identificador único “id” que es pasado desde la vista.

public function show($id)
{
    $alumno = $this->alumnos->obtenerAlumnoPorId($id);
    return view('alumnos.ver', ['alumno' => $alumno]);
}

Método editar (edit)

El método “edit” retorna un alumno en particular al formulario de la vista para poder editarlo. El método “obtenerAlumnoPorId” retorna un registro de la base de datos que cumpla con un identificador único “id”.

public function edit($id)
{
    $alumno = $this->alumnos->obtenerAlumnoPorId($id);
    return view('alumnos.editar', ['alumno' => $alumno]);
}

Método actualizar (update)

El método “update” actualiza los datos de un alumno específico por su “id”, la variable $request contiene los campos ya modificados. El método “ActualizarAlumno” se encarga de actualizar los datos del alumno obtenido, para finalizar retorna a la vista del listado de  alumnos.

public function update(Request $request, $id)
{
    $this->alumnos->actualizarAlumno($request, $id);
    return redirect()->action([AlumnoController::class, 'index']);
}

Método eliminar (destroy)

El método “destroy” elimina un alumno específico por su “Id”. El método “eliminarrAlumno” se encarga de eliminar el registro seleccionado de la base de datos.

public function destroy($id)
{
    $this->alumnos->eliminarAlumno($id);
    return redirect()->action([AlumnoController::class, 'index']);
}

Subir a GitHub los cambios realizados

Por último, vamos a subir todos las cambios realizados en esta clase al repositorio de nuestro proyecto “curso_de_laravel_basico”, Para esto realizamos lo siguiente: Lo primero es verificar los cambios locales realizados en el proyecto.

git status

Agregamos todos los cambios realizados en tu directorio de trabajo local.

git add -A

añadimos el registro de cambios dentro del proyecto.

git commit -m "Controladores en Laravel"

Por último, subimos el proyecto al repositorio de GitHub.

git push origin

Ejercicios de controladores en Laravel

Crear el controlador “PublicacionController” con todos los métodos básicos para un CRUD (Aplica el comando resource al momento de crear el controlador).

  • Utilizar el método “index” para recuperar los datos de las publicaciones y mandar a la vista.
  • Utilizar el método “show” para obtener una publicación en particular y enviarla a la vista.
  • Crear un método “showPublicaciones” para obtener las publicaciones de un alumno en particular.
  • Utilizar el método “create” y “store” para insertar un registro en la tabla “Publicaciones” y enviar un mensaje de confirmación a la vista.
  • Utilizar el método “edit” y “update” para actualizar un registro en la tabla “Publicaciones”  y enviar un mensaje de confirmación a la vista.
  • Utilizar el método “destroy” para eliminar un registro en la tabla “Publicaciones”.

Los controladores en Laravel permiten mantener una separación clara entre la lógica de la aplicación y la presentación de datos. En la siguiente clase empezaremos a ver las rutas en Laravel para manejar el flujo de solicitudes del cliente.

Saludos y éxitos.

Victor Peña

Victor Peña

Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.

1 comentario en “Controladores en Laravel”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *