Inyeccion de Dependencias (Dependency Injection)
La inyeccion de dependencias (DI) es un patron fundamental en Laravel. En lugar de que una clase cree sus propias dependencias, estas se "inyectan" desde fuera, normalmente a traves del constructor o de los parametros de un metodo.
Inyeccion en constructor
class OrderService
{
public function __construct(
private PaymentGateway $gateway,
private OrderRepository $repository,
private NotificationService $notifications,
) {}
public function placeOrder(array $data): Order
{
$order = $this->repository->create($data);
$this->gateway->charge($order->total);
$this->notifications->send($order);
return $order;
}
}
Inyeccion en metodos del controlador
Laravel inyecta automaticamente dependencias en los metodos de los controladores.
class PostController extends Controller
{
public function store(
StorePostRequest $request, // Form Request inyectado
SlugGenerator $slugger // Servicio inyectado
): RedirectResponse {
$post = Post::create([
...$request->validated(),
'slug' => $slugger->generate($request->title),
]);
return redirect()->route('posts.show', $post);
}
}
Ventajas
La inyeccion de dependencias facilita el testing (puedes inyectar mocks), promueve el bajo acoplamiento entre clases y sigue el principio de responsabilidad unica. Laravel resuelve las dependencias automaticamente usando el Service Container y la reflexion de PHP.