【问题标题】:How to change env configuration in Laravel controller?如何更改 Laravel 控制器中的环境配置?
【发布时间】:2021-08-27 11:27:50
【问题描述】:

我想从 Controller 更改环境配置,但这不起作用。

控制器

    config(['MAIL_HOST' => 'smtp.sendgrid.net']);
    config(['MAIL_PORT' => '25']);
    config(['MAIL_USERNAME' => 'apikey']);
    config(['MAIL_PASSWORD' => 'SG..']);
    
        Mail::send(
            'vendor.maileclipse.templates.news',
            ["content" => $content],
            function ($message) use ($email) {
                $message->to($email)->subject('Email');
            }
        );
    }

.env

MAIL_DRIVER=smtp
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=xy@xy.com
MAIL_FROM_NAME="Test"

ma​​il.php

【问题讨论】:

    标签: laravel email environment-variables laravel-8 laravel-7


    【解决方案1】:

    你可以像下面这样设置

       config([
    
                'mail.mailers.smtp.host' => '',
                'mail.mailers.smtp.port' => ,
                'mail.mailers.smtp.encryption' => '',
                'mail.mailers.smtp.username' => '',
                'mail.mailers.smtp.password' => '',
                'mail.from.address' => ''
    
            ]
        );
    

    这将从 mail.php 覆盖

     'mailers' => [
            'smtp' => [
                'transport' => 'smtp',
                'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
                'port' => env('MAIL_PORT', 587),
                'encryption' => env('MAIL_ENCRYPTION', 'tls'),
                'username' => env('MAIL_USERNAME'),
                'password' => env('MAIL_PASSWORD'),
                'timeout' => null,
                'auth_mode' => null,
            ],
    

    注意:正如@ceejayoz 在评论中所告知的那样。请记住,应该注意的是,这只会针对该请求进行更改。它不会为其他请求更改它,也不会更新 .env 文件。 ——

    更新

     config([
        
                    'mail.host' => '',
                    'mail.port' => ,
                    'mail.encryption' => '',
                    'mail.username' => '',
                    'mail.password' => '',
                    'mail.from.address' => ''
        
                ]
            );
    

    【讨论】:

    • 应该注意的是,这只会为那个请求改变它。它不会为其他请求更改它,也不会更新.env 文件。
    • @ceejayoz.ys definelty.谢谢提醒
    • 它不工作。我的 mail.php 看起来不像这样。我编辑了我的帖子。
    • @xMrViktorx 可以使用相同的技术,您只需适当地命名配置键。从您的屏幕截图中,您可以使用 mail.drivermail.host 之类的内容。
    • 首先检查默认配置是否有效。如果有效,则检查配置值是否正确。如果仍然无效,则检查它所说的错误
    【解决方案2】:

    使用config 文件键而不是.env 变量,在您的情况下为config/mail.php

    config(['mail.mailers.smtp.host' => 'smtp.sendgrid.net']);
    config(['mail.mailers.smtp.port' => '25']);
    config(['mail.mailers.smtp.username' => 'apikey']);
    config(['mail.mailers.smtp.password' => 'SG...']);
    
        Mail::send(
            'vendor.maileclipse.templates.news',
            ["content" => $content],
            function ($message) use ($email) {
                $message->to($email)->subject('Email');
            }
        );
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2019-04-01
      • 1970-01-01
      • 2022-10-25
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多