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.
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
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.
Pingback: Reportes PDF en Laravel DOMPDF - Norvic Software