Here is an example of broadcasting a private channel in Laravel 11:
Defining a Private Broadcast Channel
First, you need to define a private broadcast channel in your `routes/channels.php` file:
php
Broadcast::channel('private-channel.{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
This defines a private channel named `private-channel.{userId}`, where the `{userId}` part is a wildcard that will be replaced with the actual user ID. The callback function checks if the authenticated user's ID matches the provided user ID, which determines if the user is authorized to access the channel.
Broadcasting an Event to a Private Channel
Next, you can broadcast an event to this private channel. Let's say you have an event called `UserUpdated` that you want to broadcast:
php
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new PrivateChannel('private-channel.' . $this->user->id);
}
}
In the `broadcastOn()` method, we're returning a `PrivateChannel` instance with the channel name `private-channel.{userId}`, where `{userId}` is replaced with the ID of the user associated with the event.
Listening for the Event on the Client-side
On the client-side, you can use Laravel Echo to subscribe to the private channel and listen for the `UserUpdated` event:
javascript
Echo.private(`private-channel.${userId}`)
.listen('UserUpdated', (e) => {
console.log(`User ${e.user.name} was updated.`);
});
Here, `userId` is the ID of the authenticated user. Laravel Echo will automatically handle the authorization process to subscribe to the private channel.
When the `UserUpdated` event is broadcast, the client-side code will log a message to the console.
This is a basic example of broadcasting a private channel in Laravel 11. In a real-world application, you would likely have more complex authorization logic and additional functionality related to the event being broadcast.
Citations:[1] https://laravel.com/docs/11.x/broadcasting
[2] https://ashallendesign.co.uk/blog/view-your-laravel-projects-broadcast-channels-with-the-channel-list-command
[3] https://laravel-news.com/laravel-11-5-0
[4] https://stackoverflow.com/questions/78249472/laravel-11-private-channel-authorization-failing-after-upgrade-from-laravel-10
[5] https://www.youtube.com/watch?v=G8xIEejDyDY