Merhaba,
Bir hafta önce çalışan kodlar şu an bir şey yapmama rağmen bir şekilde bozuldu neyden kaynaklı olduğunu bilmiyorum açıkçası composer dump-autoload yaptığım mı için mi veya APP_URL değiştirdiğim için mi veya CACHE_DRIVER=file olarak değiştirdiğim için mi ne tetikledi emin değilim.
Aslında her şey çalışıyor sadece js tarafında;
Echo.private(`Modules.User.Entities.User.${userId}`)
.notification((notification) => {
alert('test');
});
bu bölümün içerisine giremiyor. Daha önceden işe yarıyordu.
.env
BROADCAST_DRIVER=pusher
config/broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => true,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http'
],
]
Models/User.php
public function receivesBroadcastNotificationsOn()
{
return 'Modules.User.Entities.User.'.$this->uuid;
}
routes/channels.php
Broadcast::channel('Modules.User.Entities.User.{uuid}', function ($user, $uuid) {
return (string) $user->uuid == (string) $uuid;
});
config/app.php
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class, <--- aktif
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
resources/js/bootstrap.js
window._ = require('lodash');
try {
require('bootstrap');
} catch (e) {}
/**
* We'll load the axios HTTP library which allows us to easily issue requests
* to our Laravel back-end. This library automatically handles sending the
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: false,
wsHost: window.location.hostname,
wsPort: 6001,
encrypted: false,
enabledTransports: ['ws', 'wss']
});
app/Notifications/MembershipNotification.php
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\BroadcastMessage;
class MembershipConfirmation extends Notification implements ShouldBroadcast
{
use Queueable;
public $data;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database', 'broadcast'];
}
/**
* 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', url('/'))
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'message' => $this->data['message'],
'title' => $this->data['title'],
'icon' => $this->data['icon']
];
}
/**
* Get the broadcastable representation of the notification.
*
* @param mixed $notifiable
* @return BroadcastMessage
*/
public function toBroadcast($notifiable)
{
return new BroadcastMessage($this->data);
}
/**
* Get the type of the notification being broadcast.
*
* @return string
*/
public function broadcastType()
{
return 'account.management';
}
}
kısaca aklınıza ne geliyorsa her şey tamam ve laravel-websockets panelinde de tetikleniyor.
İşlemini yaptığımız User'ın da içerisindeyim farklı kişinin oturumunda da değilim çünkü o kişiye bildirim ekleniyor sayfa yenilenince geliyor.
php artisan queue:work
bu komutu da çalıştırıyorum jobs tablosuna veri girip siliniyor ve failed_jobs tablosuna herhangi bir hata da gelmiyor.