【问题标题】:Laravel Notifications not responding to APP_URL changesLaravel 通知未响应 APP_URL 更改
【发布时间】:2021-12-16 12:37:19
【问题描述】:

我正在测试我的密码重置通知,看看它是否响应 APP_URL 中的更改,很遗憾它没有。 尽管如此,它还是会响应 APP_NAME 环境变量的变化。 我清除了我的缓存,我清除了我的视图,我运行了 php artisan optimize:clear,不幸的是没有任何效果。

奇怪的是它响应的是 APP_NAME 而不是 APP_URL 的变化...

这是我的环境文件

APP_NAME=WP
APP_ENV=local
APP_KEY=base64:uqkPjWhwt7orbinLRlRN+BNn6BxbdIRHSV4dG4dw5S0=
APP_DEBUG=true
APP_URL=http://example.com

这是未更改的 ResetPassword toMail() 函数

    public function toMail($notifiable)
{
    if (static::$toMailCallback) {
        return call_user_func(static::$toMailCallback, $notifiable, $this->token);
    }

    if (static::$createUrlCallback) {
        $url = call_user_func(static::$createUrlCallback, $notifiable, $this->token);
    } else {
        $url = url(route('password.reset', [
            'token' => $this->token,
            'email' => $notifiable->getEmailForPasswordReset(),
        ], false));
    }

    //dd(env('APP_URL')); returns http://example.com
    // dd(config('app.url')); returns http://example.com
    // dd($url); returns http://127.0.0.1:8000/{token}?email!




    return (new MailMessage)
        ->subject(Lang::get('Reset Password Notification'))
        ->line(Lang::get('You are receiving this email because we received a password reset request for your account.'))
        ->action(Lang::get('Reset Password'), $url)
        ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]))
        ->line(Lang::get('If you did not request a password reset, no further action is required.'));
}

【问题讨论】:

  • 我使用 dd 查看扩展通知的 ResetPasswod 类中 URL 的样子,不幸的是,它显示的不是 APP_URL 中的本地主机。当我使用 dd 获取 APP_URL 变量时,它会显示我设置的变量。这可能是什么问题?
  • 你使用的是哪个版本的 laravel?您是否停止了该项目的服务并再次运行它?
  • Laravel 8。是的,我再次运行该项目。在 toMail 方法中,dd(env('APP_URL')) 和 dd(config('app.url')) 返回域名。但是 dd($url) 使用 localhost ...
  • 我认为问题在于它没有使用我的 url(尽管它已在 env 文件和配置文件中定义)作为我的路由的根
  • 把你的代码示例和你的 env 文件放在一起会很有帮助,有时你错过的东西可以被新鲜的眼睛抓住

标签: php laravel environment-variables


【解决方案1】:

对 .env 文件进行更改后,您可能需要运行 php artisan cache:clearphp artisan config:clear

https://laravel.com/docs/6.x/configuration#configuration-caching

【讨论】:

  • 我这样做了,遗憾的是它没有很好地工作......在扩展通知的重置密码类中的 toMail 方法中,dd(env('APP_URL')) 和 dd(config(' app.url')) 返回域名。但是 dd($url) 使用 localhost ...
【解决方案2】:

在构建 url 时,排队通知将使用 APP_URL 配置值。但是,非排队通知在构建 url 时会使用 HTTP 请求信息。

ResetPassword 通知不是排队通知,因此它将使用触发通知的原始 HTTP 请求中的 url。在这种情况下,您似乎是在 http://127.0.0.1:8000 进行本地测试,因此这是用于构建密码重置链接的基本 url。

如果通知已排队,则将使用运行控制台内核的队列工作程序发送通知。控制台内核构建一个虚假请求,该请求根据 APP_URL 配置值设置基本 url。


注意,有一段时间,ResetPassword 通知专门在通知中使用config('app.url') 来构建 URL。这是在 5.4.22 中引入的,但后来在 6.18.7 中被删除。从那时起,它的行为就与其他所有通知一样。

【讨论】:

  • 感激不尽!真的非常感谢! :))
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多