使用Laravel 5.3 Notification功能,我看到通知会发送给这样的用户:
add_filter( 'woocommerce_add_cart_item_data', 'allow_only_one_product' );
function allow_only_one_product( $cart_item_data ) {
global $woocommerce;
$woocommerce->cart->empty_cart();
// Do nothing with the data and return
return $cart_item_data;
}
我认为$user->notify(new InvoicePaid($invoice));
是可通知的实体。如果我想向没有帐户的用户发送通知怎么办?在我的应用中,用户向他们的朋友发送邀请以加入。我正在尝试使用Laravel的通知将邀请代码发送给尚未拥有帐户的用户。
当用户邀请某人时,他们的数据会存储在邀请模型中,如下所示:
$user
我以为我可以使用notify向Invite模型发送通知,如下所示:
class Invite extends Model
{
protected $table = 'invites';
protected $fillable = array('name', 'email', 'invite_code', 'expires_at', 'invited_by');
protected $dates = ['expires_at'];
}
但上述方法无效。我收到错误:
$invite = Invite::find($inviteId);
$invite->notify(new InvitationNotification(ucfirst($invite->name), $invite->invite_code, $invite->expires_at));
所以我的问题是:
我是否只能将通知发送给用户模型?
有没有办法将通知发送给没有的新用户 一个帐户呢?
我唯一的选择是在这些情况下使用Laravel的Mailable类而不是Notification吗?
答案 0 :(得分:9)
我发现你的帖子在找同样的东西,但我自己也回答了。
您需要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());
这就是我处理发送通知的方式:)
然后,您可以通过$invite
并在通知模板中使用它。
答案 1 :(得分:2)
通知意味着发送到须通知的对象。您没有“通知”邀请。
如果你想要做的就是给某人发电子邮件,他们已经被邀请使用某个应用程序,那么只需发送一封电子邮件到该电子邮件地址即可。在这种情况下,通知不合适。
答案 2 :(得分:2)
一些替代解决方案可能是仅建立用户模型并设置email属性而不保存它。 现在可以通知该实例。
对于这种特殊情况,我不认为这是正确的方法,但是对于所写的问题,由于该线程提供了一些不同的方式来通知不存在的用户,我想我会在这里写下。
$invitedUser = new User;
$invitedUser->email = 'invite@me.com';
$invitedUser->notify(new InvitationNotification());
请注意,此解决方案在排队通知时可能会引起问题(因为它没有引用特定的用户ID)。
在Laravel> = 5.5 中,可以进行“按需通知”,其中涉及您要通知不存在的用户的确切情况。
文档示例:
Notification::route('mail', 'taylor@example.com')
->route('nexmo', '5555555555')
->notify(new InvoicePaid($invoice));
这会将通知发送到电子邮件地址,并且该方法可以排队等。
文档:https://laravel.com/docs/5.5/notifications#on-demand-notifications
答案 3 :(得分:1)
我只是想出了一个更简单的方法。首先,您必须覆盖RegisterController类中的“register”函数。为了做到这一点:
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
public function register(Request $request)
{
}
然后在寄存器功能中添加这些行;
$user = $this->create($request->all());
//创建并保存用户$user->notify(new NewRegistrationNotification($request));
//调用指定的通知类return redirect()->to('/')->with('msg', 'Thanks for registering! Check your inbox for the activation link');
接下来,配置Notification类以处理邮件发送。我在构造函数中做了类似的事情;
protected $data;
public function __construct(Request $request)
{
$this->data = $request;
}
我希望这有助于某人。
答案 4 :(得分:0)
我遇到了类似的问题,并且可以使用\Illuminate\Notifications\AnonymousNotifiable
的实例来解决它。该对象被序列化,不需要任何数据库基础结构,并且可以与队列一起使用。
$anonymousNotifiable = new AnonymousNotifiable();
$anonymousNotifiable->route('mail', ['scott.tiger@domain.com' => 'Scott Tiger']);
$anonymousNotifiable->notify(new NotificationExample());
您还可以在类route
上调用静态函数\Illuminate\Support\Facades\Notification
,该函数返回AnonymousNotifiable
的实例:
Notification::route('mail', ['scott.tiger@domain.com' => 'Scott Tiger'])->notify(new NotificationExample());
答案 5 :(得分:0)
在 Laravel 5.5 及更高版本中,您现在可以使用按需通知,将以下代码片段添加到您的控制器或观察者
Notification::route('mail', 'johndoe@example.com')->notify(new InvoicePaid($invoice))
route('mail', 'johndoe@example.com') 表示使用邮件通道,使用 johndoe@example.com 作为收件人
不要忘记导入Illuminate\Support\Facades\Notification