Qu’est ce que c’est?
L’injection de dépendance, un mot bine effrayant pour désigner quelque chose de très simple , c’est de passer en paramètre d’une fonction un objet, et ce de façon « automatique », le moteur de Laravel se chargeant d’injecter dans la fonction automatiquement.
class Mailer
{
protected $mailer;
function __construct(PHPMailer $mailer)
{
$this->mailer = $mailer;
}
public function sendMail($recipient,$content,$subject){
//...code envoi email
}
}
Maintenant supposons que nous soyons dans un e méthode de controller appelée NotifyLogin, qui envoit un mail à l’administrateur lorsque quelqu’un se connecte.
use Illuminate\Http\Request;
use use App\Helper\Mailer;
class LoginController extends Controller
{
public function __construct(){}
public function notifyLogin(Request $request, Mailer $mailer){
$email = $request->email;
$mailer->sendMail($email,'Un utilisateur s\'est connecté','Connexion');
}
}
On voit que on injecte $request, mais aussi $mailer, il n’est pas besoin d’instancier avec new, Laravel le fait automatiquement pour nous. Ceci est rendu possible parce qu’en amont, le constructeur de la class Mailer a lui-même utilisé l’injection de dépendance pour s’instancier. AInsi de proche en proche le framework arrive à fournir à la méthode notifyLogin le $mailer avec un minimum de travail de notre part, et en plus notre code est plus lisible et mieux organisé.