laravel 和 vue 中的 Pusher "No callbacks on channel for an event"
Pusher "No callbacks on channel for an event" in laravel and vue
我想尝试将推送器与我的 laravel 应用程序集成。在我按照 pusher 文档进行操作后,我的测试显示 Pusher : : ["No callbacks on my-channel for my_event"]
。数据就在那里,你可以在附加的屏幕截图上看到第一行,但第二行是第一行数据无法在我的 blade 组件上呈现的罪魁祸首。我下面的代码缺少什么?任何人请发表您的想法。
我的活动文件
class MyEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return ['my-channel'];
}
public function broadcastAs()
{
return 'my-event';
}
}
我的路由文件在 welcome.blade.php
上触发事件
Route::get('event-test', function () {
$pusher = new Pusher\Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
array('cluster' => env('PUSHER_APP_CLUSTER'))
);
$pusher->trigger(
'my-channel',
'my_event',
'Welcome'
);
return "Event has been sent";
});
我的 blade 文件:
<body>
<div class="flex-center position-ref full-height">
<h6>Pusher Test</h6>
<p>
Publish an event to channel <code>my-channel</code>
with event name <code>my-event</code>; it will appear below:
</p>
<div id="app" class="mt-4">
<ul>
<li v-for="message in messages">
@{{ message }}
</li>
</ul>
</div>
</div>
<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
var pusher = new Pusher('{{ env('PUSHER_APP_KEY') }}', {
cluster: 'ap1'
});
var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data) {
app.messages.push(JSON.stringify(data));
alert(JSON.stringify(data));
});
// Vue application
const app = new Vue({
el: '#app',
data: {
messages: [],
},
});
</script>
</body>
当我使用在路由“event-test”中创建的 url 触发事件时“
这是我在控制台上得到的:
您正在触发 my_event
(带下划线),但您的客户端代码正在监听 my-event
(带连字符)。
像下面这样在您的 PHP 代码中更改事件名称,它应该可以工作。
$pusher->trigger(
'my-channel',
'my-event',
'Welcome'
);
我想尝试将推送器与我的 laravel 应用程序集成。在我按照 pusher 文档进行操作后,我的测试显示 Pusher : : ["No callbacks on my-channel for my_event"]
。数据就在那里,你可以在附加的屏幕截图上看到第一行,但第二行是第一行数据无法在我的 blade 组件上呈现的罪魁祸首。我下面的代码缺少什么?任何人请发表您的想法。
我的活动文件
class MyEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return ['my-channel'];
}
public function broadcastAs()
{
return 'my-event';
}
}
我的路由文件在 welcome.blade.php
Route::get('event-test', function () {
$pusher = new Pusher\Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
array('cluster' => env('PUSHER_APP_CLUSTER'))
);
$pusher->trigger(
'my-channel',
'my_event',
'Welcome'
);
return "Event has been sent";
});
我的 blade 文件:
<body>
<div class="flex-center position-ref full-height">
<h6>Pusher Test</h6>
<p>
Publish an event to channel <code>my-channel</code>
with event name <code>my-event</code>; it will appear below:
</p>
<div id="app" class="mt-4">
<ul>
<li v-for="message in messages">
@{{ message }}
</li>
</ul>
</div>
</div>
<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
var pusher = new Pusher('{{ env('PUSHER_APP_KEY') }}', {
cluster: 'ap1'
});
var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data) {
app.messages.push(JSON.stringify(data));
alert(JSON.stringify(data));
});
// Vue application
const app = new Vue({
el: '#app',
data: {
messages: [],
},
});
</script>
</body>
当我使用在路由“event-test”中创建的 url 触发事件时“
这是我在控制台上得到的:
您正在触发 my_event
(带下划线),但您的客户端代码正在监听 my-event
(带连字符)。
像下面这样在您的 PHP 代码中更改事件名称,它应该可以工作。
$pusher->trigger(
'my-channel',
'my-event',
'Welcome'
);