Skip to content

Commit 2dae623

Browse files
committed
demo
1 parent 1cf623c commit 2dae623

9 files changed

+103
-0
lines changed

app/FileLogger.php

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
class FileLogger implements Logger
4+
{
5+
private $file;
6+
7+
function __construct($file)
8+
{
9+
$this->file = $file;
10+
}
11+
12+
function log($message)
13+
{
14+
file_put_contents($this->file, $message . "\n", FILE_APPEND);
15+
}
16+
17+
}

app/Logger.php

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
interface Logger
4+
{
5+
6+
function log($message);
7+
8+
}

app/Mail.php

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
class Mail
4+
{
5+
public $subject;
6+
public $message;
7+
}

app/Mailer.php

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
interface Mailer
4+
{
5+
6+
function send(Mail $mail, $to);
7+
8+
}

app/NewsletterManager.php

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
class NewsletterManager
4+
{
5+
private $mailer;
6+
private $logger;
7+
8+
function __construct(Mailer $mailer, Logger $logger)
9+
{
10+
$this->mailer = $mailer;
11+
$this->logger = $logger;
12+
}
13+
14+
function distribute(array $recipients)
15+
{
16+
$mail = new Mail;
17+
// ...
18+
foreach ($recipients as $recipient) {
19+
$this->mailer->send($mail, $recipient);
20+
}
21+
$this->logger->log('...');
22+
}
23+
24+
}

app/SendMailMailer.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
class SendMailMailer implements Mailer
4+
{
5+
6+
function send(Mail $mail, $to)
7+
{
8+
mail($to, $mail->subject, $mail->message);
9+
}
10+
11+
}

composer.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"require": {
3+
"nette/di": "~2.3"
4+
},
5+
"autoload": {
6+
"classmap": ["app"]
7+
}
8+
}

config.neon

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
services:
2+
- FileLogger( log.txt )
3+
- SendMailMailer
4+
- NewsletterManager

example.php

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
require __DIR__ . '/vendor/autoload.php';
4+
5+
6+
// create DI container
7+
$loader = new Nette\DI\ContainerLoader(__DIR__ . '/temp', TRUE);
8+
$class = $loader->load('', function($compiler) {
9+
$compiler->loadConfig(__DIR__ . '/config.neon');
10+
});
11+
$container = new $class;
12+
13+
14+
// my application
15+
$manager = $container->getByType('NewsletterManager');
16+
$manager->distribute(['[email protected]']);

0 commit comments

Comments
 (0)