Inyección de dependencias en Laravel

Inyección de dependencias en Laravel

Hola a todos, ¿cómo están? Bienvenidos de nuevo al curso intermedio de Laravel. En la lección de hoy, exploraremos la inyección de dependencias en Laravel, también conocida como Service Container

¡Comencemos!

¿Qué es la inyección de dependencias en Laravel?

La inyección de dependencias es un patrón de diseño en la programación orientada a objetos (POO) que reduce el acoplamiento entre componentes. Se basa en el principio de separar el código por responsabilidades, permitiendo que una clase suministre métodos y variables a otra mediante objetos que cumplen los contratos necesarios para su correcto funcionamiento.

Desplegar tu proyecto Laravel a producción

Adquiere la guía en formato PDF

El contenedor de servicios Laravel (Service Container)

El contenedor de servicios Laravel es una herramienta poderosa para gestionar las dependencias de clases y llevar a cabo la inyección de dependencias de manera efectiva.

Aplicar inyección de dependencias

Vamos a explorar la inyección de dependencias en Laravel. En primer lugar, crearemos una carpeta llamada “Repositories” en la ruta “App/”, Este directorio contendrá toda la lógica de acceso a datos, como consultas a la base de datos con Eloquent, con el objetivo de mantener nuestros controladores más organizados y legibles.

Para aplicar la inyección de dependencias en Laravel, vamos a crear un informe de alumnos que muestre todos aquellos alumnos inscritos por lo menos a un curso. En la carpeta “Repositories”, creamos un archivo llamado “AlumnoRepository.php”, donde creamos un método llamado “obtenerLosAlumnosIncritosAUnCurso” y la lógica de la consulta.

<?php
namespace App\Repositories; use App\Models\Alumno; class AlumnoRepository { public function obtenerLosAlumnosIncritosAUnCurso(){ $alumnos = Alumno::has('cursos')->get(); return $alumnos; } }

Aplicar inyección de dependencias en controlador

En nuestro controlador “AlumnoController”, implementaremos la inyección de dependencias. Lo primero que debemos hacer es referenciar la clase creada ‘AlumnoRepository’.

use App\Repositories\AlumnoRepository;

Ahora creamos un objeto $alumnos de tipo protected para evitar que la propiedad pueda ser modificada. Seguidamente, creamos el constructor que recibe un parámetro de tipo “’AlumnoRepository’”, Laravel automáticamente inyecta las dependencias definidas en el constructor.

protected $cursos;

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

Finalmente, creamos el método “report” donde aplicamos la inyección de dependencias de Laravel. La variable $alumnos va ser igual a la instancia del objeto que acabamos de asignar en el constructor. De esta manera, llamaremos al método “obtenerLosAlumnosInscritosAUnCurso”

public function report()
{
    $alumnos = $this->cursos->obtenerLosAlumnosIncritosAUnCurso();
    return view('alumnos.report', ['alumnos' => $alumnos]);
}

Crear las rutas Laravel (route)

Continuando, ahora vamos a definir las rutas de Laravel para el método “report” correspondientes a las funcionalidades de Alumno dentro del archivo web.php. Para realizar esta solicitud del método de nuestro controlador, emplearemos la función “Get” de HTTP.

Route::get('/alumnos/reporte/web', [AlumnoController::class, 'report'])->name('alumnos.report');

Aplicar inyección de dependencias en la vista reporte de Alumnos

Para poder visualizar el reporte en un vista del navegador. Primeramente en la ruta “resources/views/alumnos” creamos el archivo report.blade.php y dentro de este definimos la visualización del reporte donde cargamos los datos enviados desde el método “report” del controlador “AlumnoController”.

<x-layout>
    <h2>Reporte Cursos</h2>
    <br>
    <table>
        <tr>
            <th>Alumno</th>
            <th>Edad</th>
            <th>Materias</th>
        </tr>
        @foreach ($alumnos as $alumno)
            <tr>
                <td>{{ $alumno->nombre_apellido }}</td>
                <td>{{ $alumno->edad }}</td>
                <td>
                    @foreach($alumno->cursos as $curso)
                        {{ $curso->materia }}<br>
                    @endforeach
                </td>
            </tr>
        @endforeach
    </table>
</x-layout>

Realizamos las pruebas correspondientes de las funcionalidades implementadas. Recuerda que puedes descargar el código fuente de esta clase y todas las demás  clases en el repositorio de GitHub totalmente gratis.

Una observación importante en el repositorio “AlumnoRepository”es que, se tiene que tener en cuenta, que en muchas ocasiones las consultas y controles serán mucho más complejos, involucrando más de un modelo. Es ahí donde toma mayor importancias la inyección de dependencias en Laravel.

Hasta aquí la clase de hoy Inyección de dependencias en Laravel, en la siguiente clase veremos una funcionalidad de Laravel  para optimizar las consultas transaccionales a la base de datos en Laravel.

¡Te espero en la siguiente clase!

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 “Inyección de dependencias en Laravel”

  1. Pingback: Reportes PDF en Laravel DOMPDF - Norvic Software

Deja un comentario

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