|
10 | 10 | namespace Nette\Bridges\MailDI;
|
11 | 11 |
|
12 | 12 | use Nette;
|
| 13 | +use Nette\DI\Config\Expect; |
13 | 14 |
|
14 | 15 |
|
15 | 16 | /**
|
16 | 17 | * Mail extension for Nette DI.
|
17 | 18 | */
|
18 | 19 | class MailExtension extends Nette\DI\CompilerExtension
|
19 | 20 | {
|
20 |
| - public $defaults = [ |
21 |
| - 'smtp' => false, |
22 |
| - 'host' => null, |
23 |
| - 'port' => null, |
24 |
| - 'username' => null, |
25 |
| - 'password' => null, |
26 |
| - 'secure' => null, |
27 |
| - 'timeout' => null, |
28 |
| - 'context' => null, |
29 |
| - 'clientHost' => null, |
30 |
| - 'persistent' => false, |
31 |
| - ]; |
| 21 | + public function getConfigSchema(): Nette\DI\Config\Schema |
| 22 | + { |
| 23 | + return Expect::struct([ |
| 24 | + 'smtp' => Expect::bool(false), |
| 25 | + 'host' => Expect::string()->dynamic(), |
| 26 | + 'port' => Expect::int()->dynamic(), |
| 27 | + 'username' => Expect::string()->dynamic(), |
| 28 | + 'password' => Expect::string()->dynamic(), |
| 29 | + 'secure' => Expect::enum(null, 'ssl', 'tls')->dynamic(), |
| 30 | + 'timeout' => Expect::int()->dynamic(), |
| 31 | + 'context' => Expect::arrayOf('array')->dynamic(), |
| 32 | + 'clientHost' => Expect::string()->dynamic(), |
| 33 | + 'persistent' => Expect::bool(false)->dynamic(), |
| 34 | + ]); |
| 35 | + } |
32 | 36 |
|
33 | 37 |
|
34 | 38 | public function loadConfiguration()
|
35 | 39 | {
|
36 | 40 | $builder = $this->getContainerBuilder();
|
37 |
| - $config = $this->validateConfig($this->defaults); |
38 | 41 |
|
39 | 42 | $mailer = $builder->addDefinition($this->prefix('mailer'))
|
40 | 43 | ->setType(Nette\Mail\IMailer::class);
|
41 | 44 |
|
42 |
| - if (empty($config['smtp'])) { |
43 |
| - $mailer->setFactory(Nette\Mail\SendmailMailer::class); |
| 45 | + if ($this->config['smtp']) { |
| 46 | + $mailer->setFactory(Nette\Mail\SmtpMailer::class, [$this->config]); |
44 | 47 | } else {
|
45 |
| - $mailer->setFactory(Nette\Mail\SmtpMailer::class, [$config]); |
| 48 | + $mailer->setFactory(Nette\Mail\SendmailMailer::class); |
46 | 49 | }
|
47 | 50 |
|
48 | 51 | if ($this->name === 'mail') {
|
|
0 commit comments