Не удается создать уведомление при обновлении строки - PullRequest
0 голосов
/ 02 июня 2018

Я использую уведомление Laravel Pusher и могу добавить уведомление при создании строки, но возникают трудности при обновлении строки.Вот код под

CategoryObserver

public function updated(Category $category)
{
    $user = Auth::user();
    foreach($user->followers as $follower)
    {
        $follower->notify(new UpdateCategory($user, $category));
    }
}

И UpdateCategory

class UpdateCategory extends Notification
{
use Queueable;

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


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

    return [
        'following_id' => Auth::user()->id,
        'following_name' => Auth::user()->name,
    ];
}
public function toArray($notifiable)
{
    return [
        'id' => $this->id,
        'read_at' => null,
        'data' => [
            'following_id' => Auth::user()->id,
            'following_name' => Auth::user()->name,
        ],
    ];
}
}

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Ваш конструктор не использует параметры, которые вы передаете в него.Вместо этого вы запрашиваете их снова в уведомлении.

$follower->notify(new UpdateCategory( $ user, $ category ));

Не похоже, что вам нужнов этой категории, но вы должны использовать $ user следующим образом.

///In your controller
$follower->notify(new UpdateCategory($user, $category));

//In UpdateCategory
public function __construct(User $user, Category $category) //Make sure these are "used" at the top
{
    $this->user = $user;
    $this->category = $category;
}

//Which enables you to use the user *within* the notification later
public function toDatabase($notifiable)
{

    return [
        'following_id' => $this->user->id,
        'following_name' => $this->user->name
    ];
}
public function toArray($notifiable)
{
    return [
        'id' => $this->id, //You also aren't really getting this anywhere? Is it supposed to be the category id?
        'read_at' => null,
        'data' => [
            'following_id' => $this->user->id,
            'following_name' => $this->user->name
        ],
    ];
}

Я не уверен, что это полностью рассматриваемая проблема, но это определенно правильный способ использования пользователя.внутри уведомления.

0 голосов
/ 02 июня 2018
public function updated(Category $category)
{
    $user = Auth::user();
    foreach($user->followers as $follower)
    {
        $follower->notify(new UpdateCategory($user, $category));
    }
}

// В вашем уведомлении

class UpdateCategory extends Notification
{
use Queueable;

public $user;
public $category;

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct(User $user, Category $category)
{
    //
    $this->user = $user;
    $this->category = $category;
}


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

    return [
        'following_id' => $this->user->id,
        'following_name' => $this->user->name,
    ];
}
public function toArray($notifiable)
{
    return [
        'id' => $this->id,
        'read_at' => null,
        'data' => [
            'following_id' => $this->user->id,
            'following_name' => $this->user->name,
        ],
    ];
}
}

Вы используете Auth() в уведомлениях с очередями, которые недоступны.Удалите черту Queueable из вашего Уведомления и попробуйте ввести объект User в классе Уведомлений.

...