我正在研究Laravel的服务提供商,并且开始尝试覆盖Illuminate\Mail\MailServiceProvider
。
几天后,我到达了想要的地方:registerSwiftMailer
方法。
真正引起我注意的是以下评论:
// ..., which allows us to
// override this transporter instances during app start-up if necessary.
要点是:如果需要,在应用程序启动过程中“真的”有可能“覆盖”传输器实例,又怎么可能从控制器中做到这一点?
registerSwiftMailer
public function registerSwiftMailer()
{
$this->registerSwiftTransport();
// Once we have the transporter registered, we will register the actual Swift
// mailer instance, passing in the transport instances, which allows us to
// override this transporter instances during app start-up if necessary.
$this->app->singleton('swift.mailer', function ($app) {
if ($domain = $app->make('config')->get('mail.domain')) {
Swift_DependencyContainer::getInstance()
->register('mime.idgenerator.idright')
->asValue($domain);
}
return new Swift_Mailer($app['swift.transport']->driver());
});
}