2016-11-24 3 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 = 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. Является ли мой единственный выбор использовать класс Mailable Laravel вместо Notification в этих случаях?

ответ

7

Я нашел ваше сообщение, ища то же самое, но ответил сам.

Вам необходимо, чтобы 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

Perfect. Это именно то, к чему я застрял, и поскольку я не нашел решения, я в конечном итоге переписал эти уведомления в почтовые рассылки. Благодарим вас за сообщение вашего ответа. Теперь я добавлю это в свое приложение и использую уведомления вместо почтовых. Большое вам спасибо. – Neel

2

Уведомления должны быть отправлены в уведомляемый объект. Вы не «уведомляете» приглашение.

Если все, что вы хотите сделать, это отправить электронное сообщение кому-то, что им было предложено использовать приложение, а затем просто отправить электронное письмо на этот адрес электронной почты. Уведомления в этом случае не подходят.

+1

Спасибо @martin. Логически это имеет смысл. Единственная причина, по которой я пыталась использовать уведомление, - это простота использования стандартного шаблона электронной почты для текста и html и добавления для этого записи базы данных. Но да, я понимаю, что распространяемые по почте классы, вероятно, более уместны в том смысле, что это действительно уведомление пользователя. – Neel

1

Я просто выяснил более простой способ этого. Сначала вам нужно переопределить функцию «register» в вашем классе RegisterController.Для этого:

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

Далее настройте свой класс Notification для обработки сообщений посыла. Я сделал что-то подобное в своем конструкторе;

protected $data; 

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

Я надеюсь, что это поможет кому-то.

+0

Да, но в '1' вы создаете« Пользователь », который является уведомляемым объектом. Но мой первоначальный вопрос заключался в том, чтобы отправлять уведомления пользователям, которые вообще не созданы. Спасибо за ваш вклад. – Neel

+0

Как насчет создания анонимного пользователя в вашем приложении. Затем в любое время, когда вы хотите отправить приглашение с помощью уведомлений, вы создаете экземпляр и «анонимный» экземпляр. Я считаю, что почта получателя может быть настроена на ваш адрес электронной почты целевого назначения. Извините, я еще не пробовал, но причины не указаны. Дайте мне знать, если вы все еще нуждаетесь во мне, чтобы проверить. – Pendragon

 Смежные вопросы

  • Нет связанных вопросов^_^