Nee*_*eel 9 laravel laravel-mail laravel-5.3 laravel-notification
使用Laravel 5.3通知功能,我看到通知发送给用户,如下所示:
$user->notify(new InvoicePaid($invoice));
Run Code Online (Sandbox Code Playgroud)
我认为$user是值得注意的实体.如果我想向没有帐户的用户发送通知怎么办?在我的应用中,用户向他们的朋友发送邀请以加入.我正在尝试使用Laravel的通知将邀请代码发送给尚未拥有帐户的用户.
当用户邀请某人时,他们的数据存储在邀请模型中,如下所示:
class Invite extends Model
{
protected $table = 'invites';
protected $fillable = array('name', 'email', 'invite_code', 'expires_at', 'invited_by');
protected $dates = ['expires_at'];
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以使用notify向Invite模型发送通知,如下所示:
$invite = Invite::find($inviteId);
$invite->notify(new InvitationNotification(ucfirst($invite->name), $invite->invite_code, $invite->expires_at));
Run Code Online (Sandbox Code Playgroud)
但上述方法无效.我收到错误:
Call to undefined method Illuminate\Database\Query\Builder::notify()
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
我能将通知仅发送给用户模型吗?
有没有办法将通知发送给没有帐户的新用户?
在这些情况下,我唯一的选择是使用Laravel的Mailable类而不是Notification吗?
我找到了你的帖子寻找相同的东西,但我自己回答.
你需要use Notifiable;在Invite模型上.
然后导入use Illuminate\Notifications\Notifiable;并且应该能够->notify在Invite模型上使用.
$invite = Invite::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'token' => str_random(60),
]);
$invite->notify(new UserInvite());
Run Code Online (Sandbox Code Playgroud)
这就是我处理发送通知的方式:)
然后,您可以通过$invite并在通知模板中使用它.
一些替代解决方案可能是仅建立用户模型并设置电子邮件属性而不保存它。现在可以通知实例。
对于这种特殊情况,我不认为这是正确的方法,但是对于所写的问题,由于该线程提供了一些不同的方式来通知不存在的用户,我想我会在这里编写它。
$invitedUser = new User;
$invitedUser->email = 'invite@me.com';
$invitedUser->notify(new InvitationNotification());
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案在排队通知时可能会引起问题(因为它没有引用特定的用户ID)。
在Laravel> = 5.5中,可以发出“按需通知”,其中涉及您要通知不存在的用户的确切情况。
来自文档的示例:
Notification::route('mail', 'taylor@example.com')
->route('nexmo', '5555555555')
->notify(new InvoicePaid($invoice));
Run Code Online (Sandbox Code Playgroud)
这会将通知发送到电子邮件地址,并且该方法可以排队等。
的文档:https : //laravel.com/docs/5.5/notifications#on-demand-notifications
| 归档时间: |
|
| 查看次数: |
5101 次 |
| 最近记录: |