Laravel 在运行时更改服务配置参数

Laravel 在运行时更改服务配置参数,laravel,laravel-5,laravel-5.2,Laravel,Laravel 5,Laravel 5.2,我在用邮枪发邮件,Laravel 5.2想。它在config/services.php上的配置如下: 'mailgun' => [ 'domain' => env('mailgun_domain','mydomain.com'), 'secret' => env('mailgin_secret','my-secret-key-132152345423') ], 但是,在调用Mail::send之前,我需要在运行时更改该设置,以使

我在用邮枪发邮件,Laravel 5.2想。它在config/services.php上的配置如下:

    'mailgun' => [
        'domain' => env('mailgun_domain','mydomain.com'),
        'secret' => env('mailgin_secret','my-secret-key-132152345423')
    ],
但是,在调用Mail::send之前,我需要在运行时更改该设置,以使用正确的服务参数。它必须在运行时多次更改


我无法通过.env文件对其进行配置,因为所有数据都将从数据库中获取,用户在数据库中设置域和密码。

您可以在运行时使用helper动态设置配置值:

我想如果你跟随,你会走上正确的道路

php有一个方法
createMailgunDriver()
,它从默认情况下不可更改的硬位置提取服务


您需要编写自己的服务提供商,扩展
MailServiceProvider
并启动自己的传输,以便您可以按照自己的意愿从数据库中提取设置。

谢谢@alexey mezenin,当我第一次在运行时设置它时,它工作得很好。但是当我改变它的时候,如果我得到了配置值,它是可以的,但是当邮件使用它时,只有第一个值存在。。第一个配置就留在那里。我需要强制服务来重新加载配置…@astroanu在进行否决表决之前,您可以实际阅读该问题询问的关于在运行时“更改”配置值的文档,如果不存在,则不进行替换。要设置配置值,请使用config::set($key,$value)。您的解决方案是Config::get('services.mailgun',$arrayWithNewSettings)的等式@astroanu,
Config::set($key,$value)
Config(['services.mailgun'=>$arrayWithNewSettings])相同。获取您正在使用的
config('services.mailgun')的值。再看一遍文档,我想是的。未看到。您知道这些设置将是什么,或者它们总是在更改/从其他源动态提取吗?在发送邮件之前,代码必须更改“mailgun”域和密码。这些数据将保存在数据库中。在执行过程中,我需要多次更改它。@alexey mezenin提出的解决方案在第一次更改时效果很好,之后就不再更改了。。只剩下第一个值。是的,我知道你需要做什么。这是一个非常独特的场景。让我想想。当代表你的用户发送邮件时,你不应该使用他们的凭据作为全局设置!!!如果应用程序在同一请求期间发送其他邮件,例如通知管理员事件…@JaredEitnier的答案是正确的。现在检查。。我不知道它是否有效以及如何实施..:(@TiagoGouvêa在实施上述解决方案时,您面临什么问题?@TiagoGouvêa我检查了答案,您可以做的是检查答案,尝试通过创建每个文件来实施它,并让我知道您决定采取另一种解决方案的步骤……“不太吸引人”但是效率高,不使用服务。感谢所有回复!
config(['services.mailgun' => $arrayWithNewSettings]);