Skip to content

Commit e3a5e51

Browse files
author
Ariful Islam
committed
chat app init
1 parent 9599e2b commit e3a5e51

21 files changed

+1666
-3
lines changed

app/Events/MessageSent.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
use App\Models\Message;
6+
use Illuminate\Broadcasting\InteractsWithSockets;
7+
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
8+
use Illuminate\Foundation\Events\Dispatchable;
9+
10+
class MessageSent implements ShouldBroadcast
11+
{
12+
use Dispatchable, InteractsWithSockets;
13+
14+
public $message;
15+
16+
public function __construct(Message $message)
17+
{
18+
$this->message = $message;
19+
}
20+
21+
public function broadcastOn()
22+
{
23+
return ['chat-channel'];
24+
}
25+
26+
public function broadcastAs()
27+
{
28+
return 'message.sent';
29+
}
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Events\MessageSent;
6+
use App\Models\Message;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
10+
class ChatController extends Controller
11+
{
12+
public function index()
13+
{
14+
return view('chat.index', ['messages' => Message::with('user')->latest()->get()]);
15+
}
16+
17+
public function sendMessage(Request $request)
18+
{
19+
$request->validate(['message' => 'required']);
20+
21+
$message = Message::create([
22+
'user_id' => Auth::id(),
23+
'message' => $request->message,
24+
]);
25+
26+
broadcast(new MessageSent($message->load('user')))->toOthers();
27+
28+
return response()->json(['message' => $message]);
29+
}
30+
}

app/Models/Message.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use Illuminate\Database\Eloquent\Factories\HasFactory;
6+
use Illuminate\Database\Eloquent\Model;
7+
8+
class Message extends Model
9+
{
10+
use HasFactory;
11+
12+
protected $fillable = ['user_id', 'message'];
13+
14+
public function user()
15+
{
16+
return $this->belongsTo(User::class);
17+
}
18+
}

bootstrap/app.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
->withRouting(
99
web: __DIR__.'/../routes/web.php',
1010
commands: __DIR__.'/../routes/console.php',
11+
channels: __DIR__.'/../routes/channels.php',
1112
health: '/up',
1213
)
1314
->withMiddleware(function (Middleware $middleware) {

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"require": {
99
"php": "^8.2",
1010
"laravel/framework": "^11.31",
11+
"laravel/reverb": "^1.0",
1112
"laravel/tinker": "^2.9"
1213
},
1314
"require-dev": {

0 commit comments

Comments
 (0)