snooze icon indicating copy to clipboard operation
snooze copied to clipboard

Cannot access custom data

Open hktang opened this issue 1 year ago • 3 comments

I am trying to pass custom data App\Review and App\Reviewer into the notification message.

However, it seems the email message cannot access those values, resulting in an error. Both $review and $reviewer are null.

This is how the notification is set up. Where did I get it wrong?

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class ReviewDueSoon extends Notification
{
    use Queueable;

    public $review;
    public $reviewer;

    /**
     * Create a new notification instance.
     */
    public function __construct($review, $reviewer)
    {
        $this->review = $review;
        $this->reviewer = $reviewer;
        ...
    }

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

    public function toMail($notifiable)
    {
        $mailMessage = new MailMessage();
        ...

        // $this->review is null
        // $this->reviewer is null

        return $mailMessage;
    }

  }

hktang avatar Apr 20 '23 09:04 hktang

I think I figured out the issue: For the scheduled notifications to work, the notification initializer must take exactly one parameter.

So, instead of:

$reviewer->notifyAt(new ReviewDueSoon($review, $reviewer), $when, $meta);

This should be used:

$reviewer->notifyAt(new ReviewDueSoon([
        "review" => $review, 
        "reviewer" => $reviewer
    ]),
    $when,
    $meta
);

Then, in the notification constructor, we set up the notification like this:

    public function __construct($review, $params)
    {
        $this->review = $params["review"];
        $this->reviewer = $params["reviewer"];
        ...
    }

hktang avatar Apr 20 '23 10:04 hktang

Thanks @hktang !

chatisk avatar Apr 28 '23 14:04 chatisk

Feel free to PR a fix to this issue, as it would be good to support multi params

atymic avatar Mar 20 '24 01:03 atymic