Merge pull request #10898 from creative-commoners/pulls/5/dsn

FIX Use TransportFactory to prevent infinite config loop
This commit is contained in:
Guy Sartorelli 2023-08-01 16:16:14 +12:00 committed by GitHub
commit f591ac9539
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 12 deletions

View File

@ -11,18 +11,7 @@ SilverStripe\Core\Injector\Injector:
calls:
- [addSubscriber, ['%$SilverStripe\Control\Email\MailerSubscriber']]
Symfony\Component\Mailer\Transport\TransportInterface:
factory: Symfony\Component\Mailer\Transport
factory_method: fromDsn
factory: SilverStripe\Control\Email\TransportFactory
constructor:
dsn: 'sendmail://default'
dispatcher: '%$Symfony\Component\EventDispatcher\EventDispatcherInterface.mailer'
---
Name: mailer-dsn-env
After: '*'
Only:
envvarset: MAILER_DSN
---
SilverStripe\Core\Injector\Injector:
Symfony\Component\Mailer\Transport\TransportInterface:
constructor:
dsn: '`MAILER_DSN`'

View File

@ -0,0 +1,21 @@
<?php
namespace SilverStripe\Control\Email;
use SilverStripe\Core\Environment;
use SilverStripe\Core\Injector\Factory;
use Symfony\Component\Mailer\Transport;
/**
* Creates an email transport from a DSN string
* A DSN defined in an environment variable has priority over a DSN defined in yml config file
*/
class TransportFactory implements Factory
{
public function create($service, array $params = [])
{
$dsn = Environment::getEnv('MAILER_DSN') ?: $params['dsn'];
$dispatcher = $params['dispatcher'];
return Transport::fromDsn($dsn, $dispatcher);
}
}