Je veux créer une conversation avec laravel 5.4, vuejs et pusher api avec Echo. Je l'ai fait deux fois pour communiquer avec poussoir mais je n'ai aucun rappel et ma vue. Je travaille en local avec MAPM si cela peut aider.Laravel 5.4 diffusion d'événements ne fonctionne pas avec vuejs
j'ai installer
composer require pusher/pusher-php-server
npm install --save laravel-echo pusher-js
et ma lame-je mettre ce
<meta name="csrf-token" content="{{ csrf_token() }}">
dans mes bootstrap.js j'ai uncomment Echo et j'ai ma clé d'entrée poussoir
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'my-push-key'
});
ma config de radiodiffusion
'default' => env('BROADCAST_DRIVER', 'null'),
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
//
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
mon .env
BROADCAST_DRIVER=log
PUSHER_APP_ID=my id key
PUSHER_APP_KEY=my app key
PUSHER_APP_SECRET=my secret key
et mes app.js
const root = new Vue({
el: '#root',
data: {
messages: []
},
methods: {
addMessage(message){
this.messages.push(message);
axios.post('/messages', message).then(response => {
});
}
},
created() {
axios.get('/messages').then(response => {
this.messages = response.data;
});
Echo.join('chatroom')
.here()
.joining()
.leaving()
.listen('MessagePosted', (e) => {
console.log(e);
});
}
});
mon contrôleur
public function store(Request $request){
$user = Auth::user();
$message = $user->messages()->create([
'message' => $request->message
]);
event(new MessagePosted($message, $user));
return ['status' => 'OK'];
}
mon événement
namespace App\Events;
use App\Message;
use App\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class MessagePosted implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Message $message, User $user)
{
$this->message = $message;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PresenceChannel('chatroom');
}
}
et itinéraire de canal
Broadcast::channel('chatroom', function ($user) {
return $user;
});
Existe-t-il une autre alternative moins chère et pertinente pour Pusher? il est très coûteux –
[https://socket.io/] est une alternative à Pusher et aussi une source ouverte. Je n'ai jamais essayé dans le projet. Pusher.js est facile à intégrer avec le système. –
@Rutvij Kothari, On dirait que vous pouvez m'aider. Regardez ceci: https://stackoverflow.com/questions/45877837/how-can-i-make-realtime-notification-for-user-who-are-not-login –