laravelでpusherを使ったことがないので、
pusherの動作確認のために、実行したところ、
array_merge(): Argument #2 is not an array
というエラーが出て、pusherの動作確認が出来ません。
pusher側のデバッグコンソールには反応があるので、疎通はしているのだと思っています。
上記のエラーの原因が全くわからず、配列になっていないエラーというのがどの場面で出ているのか教えて下さい。
web.php
Route::get('/hello', function() { event(new \App\Events\HelloPusher('テストメッセージ')); return 'hello pusher'; }); Route::get('/test2', function () { return view('test2'); })->name('test2');
test2.blade.php
<!DOCTYPE html> <head> <title>Pusher Test</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.min.js"></script> <script src="https://js.pusher.com/4.3/pusher.min.js"></script> <script> Pusher.logToConsole = true; var pusher = new Pusher('xxxxxxxxxxxxxx', { cluster: 'xxx', forceTLS: true }); //購読するチャンネルを指定 var channel = pusher.subscribe('my-channel'); //イベントを受信したら channel.bind('my-event', function(data) { $.notify(data.message, 'info'); }); </script> </head> <body> <h1>Pusher Test</h1> <p> 別ブラウザ(タブ)で/helloにアクセスすると、右端から通知が出現します。 </p> </body>
app/Event/HelloPusher.php
<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class HelloPusher implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message; /** * コンストラクタ * * @param string $message */ public function __construct($message = 'hello pusher') { $this->message = $message; } /** * 送信先のチャンネル * @return \Illuminate\Broadcasting\Channel|array */ public function broadcastOn() { return ['my-channel']; } /** * イベント名 * @return string */ public function broadcastAs() { return 'my-event'; } }
pusherサイト側のログでは
Subscribed Channel: my-channel Socket ID: xxxxxx 13:26:30
Connection Origin: Socket ID: xxxxxx 13:26:30
のようになっています
エラー情報の追記
[2021-02-27 22:43:51] develop.ERROR: array_merge(): Argument #2 is not an array {"exception":"[object] (ErrorException(code: 0): array_merge(): Argument #2 is not an array at /var/www/html/develop/vendor/pusher/pusher-php-server/src/Pusher.php:518) [stacktrace] #0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'array_merge(): ...', '/var/www/html/d...', 518, Array) #1 /var/www/html/develop/vendor/pusher/pusher-php-server/src/Pusher.php(518): array_merge(Array, NULL) #2 /var/www/html/develop/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php(113): Pusher\Pusher->trigger(Array, 'my-event', Array, NULL, true) #3 /var/www/html/develop/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php(64): Illuminate\Broadcasting\Broadcasters\PusherBroadcaster->broadcast(Array, 'my-event', Array) #4 /var/www/html/develop/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Broadcasting\BroadcastEvent->handle(Object(Illuminate\Broadcasting\Broadcasters\PusherBroadcaster))
まだまだ続くのですが
バージョン追記
Laravel 6.20.6
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).",
となっています
コンソールに出ていたもの
Pusher : State changed : connecting -> connected with new socket ID pusher.min.js:8 Pusher : Event sent : {"event":"pusher:subscribe","data":{"channel":"my-channel"}} pusher.min.js:8 Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"my-channel"} pusher.min.js:8 Pusher : No callbacks on my-channel for pusher:subscription_succeeded pusher.min.js:8 Pusher : Event sent : {"event":"pusher:ping","data":{}}
回答1件
あなたの回答
tips
プレビュー