Dependency injection is a programming technique that makes a class
independent of its dependencies. It achieves that by decoupling the
usage of an object from its creation.
Example
Setup/Dependency:
File: /Src/Mail.php
<?php
namespace DI;
class Mail{
private $cc;
function __construct($fromname,$fromemail)
{
$this->fromname = $fromname;
$this->fromemail = $fromemail;
}
function sendMail($to,$subject,$message)
{
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From: '.$this->fromemail.'<'.$this->fromemail.'>' . "\r\n";
mail($to,$subject,$message,$headers);
}
}
File: /src/Notification.php
<?php
namespace DI;
class Notification{
function __construct(Mail $mail)
{
$mail->sendMail("shanky@tech.com","Test Class","Welcome to Dependency Injection course.");
}
}
File: /index.php
<?php
require_once('vendor/autoload.php');
use DI\Mail;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
$container->setParameter('mailer.from_name', 'sendmail');
$container->setParameter('mailer.from_email', 'sendmail');
$container->register('mail', 'DI\Mail')->addArgument('%mailer.from_name%','%mailer.from_email%');;
$container->register('notification', 'DI\Notification')->addArgument(new Reference('mail'));
Example
Setup/Dependency:
- composer require symfony/dependency-injection
- composer require symfony/yaml
- composer require symfony/config
- Create folder "src"
- Add entry in composer.json "autoload":{"psr-4"{"DI\\": "src/"}
- and then run composer dump-autoload -o
File: /Src/Mail.php
<?php
namespace DI;
class Mail{
private $cc;
function __construct($fromname,$fromemail)
{
$this->fromname = $fromname;
$this->fromemail = $fromemail;
}
function sendMail($to,$subject,$message)
{
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From: '.$this->fromemail.'<'.$this->fromemail.'>' . "\r\n";
mail($to,$subject,$message,$headers);
}
}
File: /src/Notification.php
<?php
namespace DI;
class Notification{
function __construct(Mail $mail)
{
$mail->sendMail("shanky@tech.com","Test Class","Welcome to Dependency Injection course.");
}
}
File: /index.php
<?php
require_once('vendor/autoload.php');
use DI\Mail;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
$container->setParameter('mailer.from_name', 'sendmail');
$container->setParameter('mailer.from_email', 'sendmail');
$container->register('mail', 'DI\Mail')->addArgument('%mailer.from_name%','%mailer.from_email%');;
$container->register('notification', 'DI\Notification')->addArgument(new Reference('mail'));
Comments
Post a Comment