根据自定义用户区域设置值发送 Laravel 通知

Posted

技术标签:

【中文标题】根据自定义用户区域设置值发送 Laravel 通知【英文标题】:Send Laravel notifications according to custom user locale value 【发布时间】:2022-01-02 05:38:16 【问题描述】:

我正在寻找基于用户区域设置值(英语和西班牙语)在 Laravel 中构建通知的最佳方法。

SomeController.php(发送通知):

Notification::send(User::find($some_id), new CustomNotification($some_parameter));

CustomNotification.php

class CustomNotification extends Notification

    use Queueable;
    protected $title, $body, $foot;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($some_parameter)
    
        $this->title = __('Some Title');
        $this->response = __('Some Response');
        $this->foot = 'My WebPage Title';
    
    ...

使用 CustomNotification 构造,$title 和 $response 的值将根据发送通知的当前用户进行转换,但在这种情况下,发送通知的是管理员,因此此变量的值将在管理员区域设置,而不是用户。

【问题讨论】:

您可能必须在Notification::send() 调用之外定义$user = User::find($some_id),以便您可以将其传递给new CustomNotification($some_parameter, $user) 调用,然后您可以根据传递的@987654327 执行app()->setLocale() @ 在调用那些 __() 方法之前。 【参考方案1】:

在这种情况下,您应该将语言环境存储在 users 表中,然后您可以将其(或至少是他的语言环境)发送到通知构造函数:

$user=User::find($some_id);

Notification::send($user, new CustomNotification($some_parameter,$user));

在你的通知类中:

class CustomNotification extends Notification

    use Queueable;
    protected $title, $body, $foot;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($some_parameter,User $user)
    
       
        App::setLocale($user->locale??$defaultLocale);

        $this->title = __('Some Title');
        $this->response = __('Some Response');
        $this->foot = 'My WebPage Title';
    
    ...

也喜欢@ManojKiran Appathurai,你使用laravel notification localization:

 Notification::send($user, new CustomNotification($some_parameter)->locale($user->locale);

【讨论】:

我有点想避免对数据库的吸引力,但如果没有更好的方法,我想我会添加迁移。 我的用户表中也有该列 Laravel 开箱即用地支持 localizing-notifications @ManojKiranAppathurai,谢谢! ,我已将您的评论包含在答案中

以上是关于根据自定义用户区域设置值发送 Laravel 通知的主要内容,如果未能解决你的问题,请参考以下文章

Laravel使用数据库队列给用户发送通知

Laravel使用数据库队列给用户发送通知

IOS 静默推送通知发送自定义键/值

Laravel 数据库通知仅更新计数

Firebase FCM 令牌和给每个用户的自定义消息

laravel 根据字段不同值做不同查询