4

Я пытаюсь добавить имя пользователя в уведомлениях. На данный момент, Laravel письма уведомления начинается как:Laravel 5.3 Как показать имя пользователя в уведомлениях Email

Hello, 

И я хочу, чтобы изменить его на:

Hello Donald, 

Прямо сейчас, у меня есть, как это предустановка. Этот пример для сброса пароля уведомления по электронной почте:

Модель пользователя:

public function sendPasswordResetNotification($token) 
     { 
      $this->notify(new PasswordReset($token)); 
     } 

App \ Сообщения \ PasswordReset:

class PasswordReset extends Notification 
{ 
    use Queueable; 

    /** 
    * Create a new notification instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Get the notification's delivery channels. 
    * 
    * @param mixed $notifiable 
    * @return array 
    */ 
    public function via($notifiable) 
    { 
     return ['mail']; 
    } 

    /** 
    * Get the mail representation of the notification. 
    * 
    * @param mixed $notifiable 
    * @return \Illuminate\Notifications\Messages\MailMessage 
    */ 
    public function toMail($notifiable) 
    { 
     return (new MailMessage) 
        ->line('The introduction to the notification.') 
        ->action('Notification Action', 'https://laravel.com') 
        ->line('Thank you for using our application!'); 
    } 

    /** 
    * Get the array representation of the notification. 
    * 
    * @param mixed $notifiable 
    * @return array 
    */ 
    public function toArray($notifiable) 
    { 
     return [ 
      // 
     ]; 
    } 
} 

ли модель пользователя автоматически переплетены с уведомлением Класс? Как добавить имя пользователя в представление?

+0

теперь ваша электронная почте отправить без имени пользователя? –

+0

есть. Он начинается с 'Hello!' В уведомлении по умолчанию, которое по умолчанию. Если я добавлю к клику '$ user-> first_name' или' $ first_name', он выдает неопределенную ошибку переменной. Итак, я считаю, что пользовательский объект должен быть отправлен из класса уведомлений? – Neel

+0

Вы создали почтовый класс для этого и представления? –

ответ

6

Попробуйте это:

User Model:

public function sendPasswordResetNotification($token) { 
    return $this->notify(new PasswordReset($token, $this->username)); 
} 

App\Notifications\PasswordReset:

class PasswordReset extends Notification 
{ 
    use Queueable; 

    public $username; 

    public function __construct($token, $username) 
    { 
     $this->username = $username; 
    } 

    public function via($notifiable) 
    { 
     return ['mail']; 
    } 

    public function toMail($notifiable) 
    { 
     return (new MailMessage) 
        ->greeting('Hello '.$this->username.',') 
        ->line('The introduction to the notification.') 
        ->action('Notification Action', 'https://laravel.com') 
        ->line('Thank you for using our application!'); 
    } 
} 
+0

Это не сработало. Я получаю сообщение об ошибке: 'Аргумент 1 передан в App \ Notifications \ PasswordReset :: __ construct() должен быть экземпляром App \ Models \ User, заданной строкой, вызываемой в /app/Models/User.php в строке 65 и defined'. Это связано с тем, что при вызове этого класса Notification пропускается '$ token'. Поэтому, когда я перехожу к: 'public function __construct ($ token, User $ user)', теперь я получаю сообщение об ошибке 'Аргумент 2, переданный в App \ Notifications \ PasswordReset :: __ construct() должен быть экземпляром App \ Models \ Пользователь, ни один заданный и не определенный'. Ожидается, что модель User будет передана при вызове класса. – Neel

+0

Я обновил свой ответ. Проверь это сейчас. –

+0

Это прекрасно. Точно, что я был после. Эта строка сделала это для меня «return $ this-> notify (новый парольReset ($ token, $ this-> username));'. Я не знал, что могу легко отправить имя пользователя из метода переопределения в пользовательской модели напрямую. Спасибо огромное! – Neel

2

Вы должны отредактировать toMail функцию в App\Notifications\PasswordReset, чтобы установить greeting, как вы хотите.

public function toMail($notifiable) { 
    return (new MailMessage) 
     ->greeting('Hello '. $this->username) 
     ->line('The introduction to the notification.') 
     ->action('Notification Action', 'https://laravel.com') 
     ->line('Thank you for using our application!'); 
} 

Update

$username Чтобы установить, нужно определить переменный метод & сеттера в App\Notifications\PasswordReset.

protected $username = null; 

public function setName($name) { 
    $this->username = $name; 
} 

При инициализации App\Notifications\PasswordReset вы можете установить имя.

В модели User обновите функцию, как показано ниже.

public function sendPasswordResetNotification($token) { 
    $resetNotification = new ResetPasswordNotification($token); 
    $resetNotification->setName($this->name); 

    $this->notify($resetNotification); 
} 
+0

Но это дает ошибку 'Undefined variable: username'. Как класс уведомлений получает информацию о пользователе? – Neel

+0

@Neel Вам нужно добавить переменную класса и установить ее. Обновленный ответ, пожалуйста, проверьте –

+0

Можете ли вы показать мне, как мне инициализировать его в модели пользователя? – Neel

4

$notifiable переменная передается toMail() является модель пользователя.

вызовов к необходимому атрибуту пользователя модели, легко:

public function toMail($notifiable) 
{ 
    return (new MailMessage) 
     ->greeting('Hello '. $notifiable->username) 
     ->line('The introduction to the notification.') 
     ->action('Notification Action', 'https://laravel.com') 
     ->line('Thank you for using our application!'); 
} 
+0

Это должен быть правильный ответ! – Hese

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

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