snooze
snooze copied to clipboard
Cannot access custom data
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;
}
}
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"];
...
}
Thanks @hktang !
Feel free to PR a fix to this issue, as it would be good to support multi params