質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

解決済

LaravelでPusherへbroadcastできない

clack02
clack02

総合スコア24

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

1回答

0評価

0クリップ

225閲覧

投稿2022/04/20 07:49

目的

LarevelでDM機能を実装したく、メッセージのやり取りをリアルタイムで行いたい。

現象

PusherのDebug consoleを見ると、ConnectionとSubscribeは行えているように見える。
Laravelからイベント通知を行うとエラーが出て、イベント通知を行うことができません。
エラーログから引数がnullになっているのはわかるのですが対策方法がわかりません。

イメージ説明

試したこと

  • queueをdatabaseとsyncで実行
  • pusher/puhser-php-serverのバージョン変更
    • 4.0以下だとphpのバージョンの問題で入らなかったので、^5.0を試しました

環境

laravel

Laravel Framework 6.20.44

php

PHP 8.0.18 (cli) (built: Apr 19 2022 00:24:16) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies

pusher/pusher-php-server

versions : * 7.0.2

npm

6.13.4

コード

イベント

MessageCreated.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; use App\Models\DmRoomMessage; class MessageCreated implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message; public function __construct() { } public function broadcastOn() { return new Channel('hello'); } }

環境変数

BROADCAST_DRIVER=pusher QUEUE_CONNECTION=sync PUSHER_APP_ID=app_id PUSHER_APP_KEY=app_key PUSHER_APP_SECRET=app_secret PUSHER_APP_CLUSTER=app_cluster

コントローラ

DmController.php

... public function post_dm() { event(new MessageCreated()); }

フロントエンド

index.php

{{-- echoテスト --}} <script> window.Echo.channel('hello') .listen('MessageCreated', (e) => { console.log(e) console.log('接続テスト'); }); </script>

エラーログ

failed_jobs

id: 38 connection: database queue: default payload: {"displayName":"App\\Events\\MessageCreated","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"delay":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"Illuminate\\Broadcasting\\BroadcastEvent","command":"O:38:\"Illuminate\\Broadcasting\\BroadcastEvent\":10:{s:5:\"event\";O:25:\"App\\Events\\MessageCreated\":2:{s:7:\"message\";N;s:6:\"socket\";N;}s:5:\"tries\";N;s:7:\"timeout\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:10:\"middleware\";a:0:{}s:7:\"chained\";a:0:{}}"}} exception: Symfony\Component\Debug\Exception\FatalThrowableError: Pusher\Pusher::trigger(): Argument #4 ($params) must be of type array, null given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php on line 113 in /var/www/html/vendor/pusher/pusher-php-server/src/Pusher.php:432 Stack trace: #0 /var/www/html/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php(113): Pusher\Pusher->trigger(Array, 'App\\Events\\Mess...', Array, NULL, true) #1 /var/www/html/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php(64): Illuminate\Broadcasting\Broadcasters\PusherBroadcaster->broadcast(Array, 'App\\Events\\Mess...', Array) #2 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Broadcasting\BroadcastEvent->handle(Object(Illuminate\Broadcasting\Broadcasters\PusherBroadcaster)) #3 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() #4 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure)) ... 以下略

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。