this is my controller
namespace App\Http\Controllers;
use App\Events\MessageSent; use Illuminate\Http\Request; use App\Message;
class ChatsController extends Controller {
//
public function __construct()
{
$this->middleware('auth');
}
public function index(){
return view('chats');
}
public function fetchMessages(){
return Message::with('user')->get;
}
public function sendMessage(Request $request){
$message=auth()->user()->messages()->create([
'message'=>$request->message
]);
broadcast(new MessageSent($message->load('user')));
return['status'=>'success'];
}
}
vue component
export default {
props:['user'],
data(){
return{
messages:[],
newMessage:''
}
},
created() {
this.fetchMessages();
Echo.join('chats')
.listen('MessageSent',(event) =>{
this.messages.push(event.message);
});
},
methods:{
fetchMessages(){
axios.get('messages').then(response =>{
this.messages = response.data;
})
},
sendMessage(){
this.messages.push({
user:this.user,
message: this.newMessage
})
axios.post('messages',{message:this.newMessage});
this.newMessage='';
}
}
}
All Routes
Route::get('/', function () { broadcast(new \App\Events\websocketDemoEvent('some data')); return view('welcome'); }); Route::get('/chats','ChatsController@index'); Route::get('/messages','ChatsController@fetchMessages'); Route::post('/messages','ChatsController@sendMessage'); Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');