|
10 | 10 | namespace Nette\Bridges\MailDI; |
11 | 11 |
|
12 | 12 | use Nette; |
| 13 | +use Nette\Schema\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\Schema\Schema |
| 22 | + { |
| 23 | + return Expect::structure([ |
| 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 | + ])->castTo('array'); |
| 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