1. Go to this page and download the library: Download nette/di library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
nette / di example snippets
class Mail
{
public string $subject;
public string $message;
}
interface Mailer
{
function send(Mail $mail, string $to): void;
}
interface Logger
{
function log(string $message): void;
}
class NewsletterManager
{
private Mailer $mailer;
private Logger $logger;
public function __construct(Mailer $mailer, Logger $logger)
{
$this->mailer = $mailer;
$this->logger = $logger;
}
public function distribute(array $recipients): void
{
$mail = new Mail;
$mail->subject = '...';
$mail->message = '...';
foreach ($recipients as $recipient) {
$this->mailer->send($mail, $recipient);
}
$this->logger->log('...');
}
}
class SendMailMailer implements Mailer
{
public function send(Mail $mail, string $to): void
{
mail($to, $mail->subject, $mail->message);
}
}
class FileLogger implements Logger
{
private string $file;
public function __construct(string $file)
{
$this->file = $file;
}
public function log(string $message): void
{
file_put_contents($this->file, $message . "\n", FILE_APPEND);
}
}
class Container
{
private ?Logger $logger;
private ?Mailer $mailer;
public function getLogger(): Logger
{
if (!isset($this->logger)) {
$this->logger = new FileLogger('log.txt');
}
return $this->logger;
}
public function getMailer(): Mailer
{
if (!isset($this->mailer)) {
$this->mailer = new SendMailMailer;
}
return $this->mailer;
}
public function createNewsletterManager(): NewsletterManager
{
return new NewsletterManager($this->getMailer(), $this->getLogger());
}
}
$container = new Container;
$manager = $container->createNewsletterManager();
$manager->distribute(...);
$loader = new Nette\DI\ContainerLoader(__DIR__ . '/temp');
$class = $loader->load(function($compiler) {
$compiler->loadConfig(__DIR__ . '/config.neon');
});
$container = new $class;
$loader = new Nette\DI\ContainerLoader(__DIR__ . '/temp', autoRebuild: true);
class NewsletterManager
{
private AnotherService $anotherService;
public function setAnotherService(AnotherService $service): void
{
$this->anotherService = $service;
}
...
use Nette\DI\Attributes\Inject;
class FooClass
{
private Service1 $service1;
// 1) inject* method:
public function injectService1(Service1 $service): void
{
$this->service1 = $service1;
}
// 2) Assign to the variable with the #[Inject] attribute:
#[Inject]
public Service2 $service2;
}
interface BarFactory
{
function create(): Bar;
}
class Bar
{
private Logger $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
}
class Foo
{
private BarFactory $barFactory;
function __construct(BarFactory $barFactory)
{
$this->barFactory = $barFactory;
}
function bar(): void
{
$bar = $this->barFactory->create();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.