根据自定义用户区域设置值发送 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 通知的主要内容,如果未能解决你的问题,请参考以下文章