2016-11-24 21 views
7

随着Laravel 5.3提醒功能,我看到通知这样发送给用户:Laravel 5.3发送通知到用户,无需账号

$user->notify(new InvoicePaid($invoice)); 

在哪里,我相信$user是法定实体。如果我想向没有帐户的用户发送通知,该怎么办?在我的应用程序中,用户发送邀请给他们的朋友加入。我正尝试使用Laravel的通知将邀请代码发送给尚未拥有帐户的用户。

当用户邀请的人,他们的数据存储在邀请模式是这样的:

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)); 

但上述不起作用。我得到的错误:

Call to undefined method Illuminate\Database\Query\Builder::notify() 

所以我的问题是:

  1. 我是否能够发送通知只有用户模型?

  2. 有没有办法将通知发送给没有 帐户的新用户?

  3. 是我唯一的选择是使用Laravel的可邮寄类,而不是通知在这些情况下?

回答

7

我发现你的帖子寻找相同的东西,但自己回答。

您需要use Notifiable;Invite模型。

然后您输入use Illuminate\Notifications\Notifiable;,并且应该能够在Invite模型上使用->notify

$invite = Invite::create([ 
    'name' => $request->get('name'), 
    'email' => $request->get('email'), 
    'token' => str_random(60), 
]); 

$invite->notify(new UserInvite()); 

这就是我如何处理发送通知:)

然后,您可以通过$invite和使用通知模板中。

+1

完美。这正是我所坚持的,因为我没有找到解决方案,我最终将这些通知重写为邮件。感谢您发布您的答案。我现在将其添加到我的应用程序中,并使用通知而不是邮件。非常感谢。 – Neel

2

通知意在被发送到呈报对象。你不“通知”邀请。

如果所有你想要做的是,他们已经邀请到使用应用程序的电子邮件的人,那么就请发送电子邮件至该电子邮件地址。通知在这种情况下不适用。

+1

谢谢@马丁。从逻辑上讲,这确实有道理。我试图使用通知的唯一原因是由于易于在文本和html中使用标准电子邮件模板并为此添加数据库条目。但是,是的,我确实明白,邮寄类可能更合适,因为这不是用户通知。 – Neel

1

我只是想出了一个更简单的方法。首先你必须重写你的RegisterController类中的'register'函数。为了做到这一点:

use Illuminate\Http\Request; 
use Illuminate\Auth\Events\Registered; 

public function register(Request $request) 
{ 


} 

然后添加这些行在您的注册功能;

  1. $user = $this->create($request->all()); //创建并保存用户
  2. $user->notify(new NewRegistrationNotification($request)); //调用指定通知类
  3. return redirect()->to('/')->with('msg', 'Thanks for registering! Check your inbox for the activation link');

接下来,配置您的通知类来处理消息发送。我在构造函数中做了这样的事情;

protected $data; 

public function __construct(Request $request) 
{ 
    $this->data = $request; 
} 

我希望这有助于某人。

+0

是的,但在'1'中,您正在创建一个“用户”,它是可通知对象。但我最初的问题是发送通知给根本没有创建的用户。感谢您的输入。 – Neel

+0

如何在您的应用中创建匿名用户。然后,无论何时您想使用通知发送邀请,您都会实例化和“匿名”实例。我相信目标邮件可以配置为您的目标目标电子邮件地址。对不起,我还没有尝试过,因为没有附加代码。让我知道你是否仍然需要我来测试。 – Pendragon