Intereting Posts
Я хочу обновить значение переключателя в базе данных (mysql), используя php PHP DOMPDF html to PDF конвертер проблема с выпуском шрифта в версии 6.0.1 Как эхо значение true / false Prolog возвращается после запроса Как создать новую страницу в плагине WordPress? Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 из них … что я делаю неправильно? Установите php-mcrypt на CentOS 6 Как отслеживать страницу загрузки с помощью google-analytics и php? Как получить путь иерархии элемента в массиве Как получить доступ к N-му элементу массива в PHP Symfony с использованием yaml и php routing Отправить электронное письмо, когда произведена оплата в PayPal Я использую Ajax, но страница все еще освежает, когда я нажимаю кнопку submit Как получить данные изображения php через javascript copy-n-paste с помощью XMLHttpRequest Как сохранить zip-файл, представленный в виде строки в узле js Создать документ Word с помощью PHP в Linux

Передача событий в режиме Laravel 5.4 не работает с vuejs

Я хочу создать чат с laravel 5.4, vuejs и pusher api с Echo. Я сделал это два раза, чтобы общаться с толкателем, но у меня нет обратного вызова и моего vue. Я работаю на местном уровне с MAPM, если это может помочь.

я установил

composer require pusher/pusher-php-server npm install --save laravel-echo pusher-js 

и мой клинок я положил это

 <meta name="csrf-token" content="{{ csrf_token() }}"> 

в моем bootstrap.js у меня есть uncomment Echo, и у меня есть запись моего ключа-толкателя

 import Echo from "laravel-echo" window.Echo = new Echo({ broadcaster: 'pusher', key: 'my-push-key' }); 

моя конфигурация трансляции

 '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', ], ], 

мой .env

 BROADCAST_DRIVER=log PUSHER_APP_ID=my id key PUSHER_APP_KEY=my app key PUSHER_APP_SECRET=my secret key 

и мой 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); }); } }); 

мой контроллер

 public function store(Request $request){ $user = Auth::user(); $message = $user->messages()->create([ 'message' => $request->message ]); event(new MessagePosted($message, $user)); return ['status' => 'OK']; } 

мое событие

 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'); } } 

и канал

 Broadcast::channel('chatroom', function ($user) { return $user; }); 

1) Начнем с файла .env.

 BROADCAST_DRIVER =pusher // instead of log 

2) config / app.php

 App\Providers\BroadcastServiceProvider::class, //Uncomment it out 

3) config / broadcasting.php

 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => 'mt1', //mt1 is for east united state, eu for europe. ], ], 

Вы можете найти информацию о кластере, кроме имени вашего приложения, в панели инструментов толкателя

4) Файл bootstrap.js

 window.axios.defaults.headers.common = { // 'X-CSRF-TOKEN': window.Laravel.csrfToken, <-- Comment it out (if you are extending layouts.app file, you won't require this.) 'X-Requested-With': 'XMLHttpRequest' }; window.Echo = new Echo({ broadcaster: 'pusher', key: 'YOUR_PUSHER_KEY', cluster: 'mt1', encrypted : true }); 

5) Измените свой chat.blade.php на следующий код.

 @extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading"> Chatroom </div> <div id="app"> <chat-log :messages="messages"></chat-log> <chat-composer v-on:messagesent="addMessage"></chat-composer> </div> </div> </div> </div> </div> @endsection