在 Laravel Blade 中绑定实时通知作为警报
Bind Real Time Notifications in Laravel Blade as alert
在我的网络应用程序中,我想在管理员创建某些任务时通知某些特定用户。这应该是实时的。因此我使用了 laravel pusher。但这没有任何意义。我想解决这个问题。
我的控制器:
public function add(Request $request){
$data = $request->all();
$tasks = Todo::create($data);
//send notofications
$notifyTo = User::whereHas('roles', function($q){$q->whereIn('slug', [ 'manager' ]);})->get();
foreach ($notifyTo as $notifyUser) {
$notifyUser->notify(new TaskCreated($tasks));
}
}
我的任务创建通知Class
public function via($notifiable)
{
return ['broadcast'];
}
public function toBroadcast($notifiable)
{
return [
'title' => $this->tasks->task
];
}
我的 Pusher 调试控制台
这是我的boostrap.js
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key:'bf6e79cce8gfggf548fb2c5e9',
cluster: 'ap2',
forceTLS: true
});
这是我的前端
<script>
var userId = $('meta[name="userId"]').attr('content');
Echo.private('App.User.' + userId)
.notification((notification) => {
console.log(notification.type);
});
</script>
Config/broadcasting.php
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
//'options' => [
//'cluster' => env('PUSHER_APP_CLUSTER'),
//'encrypted' => true,
// 'host' => '127.0.0.1',
// 'port' => 6004,
// 'scheme' => 'http'
//],
'options' => [
'cluster' => 'ap2',
'useTLS' => true
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
我想在我的 laravel 网络应用程序中提醒通知标题。怎么可能?请提出前端解决方案。
您需要在用户模型中使用 Notifiable
特征。之后,您需要指定广播将使用的频道。为了使其唯一,在常量 channel_name 的末尾附加 user_id ,如下所示:
class User extends Authenticatable
{
use Notifiable;
/**
* The channels the user receives notification broadcasts on.
*
* @return string
*/
public function receivesBroadcastNotificationsOn()
{
return 'users.'.$this->id;
}
}
在前端,您需要使用一个名为 Laravel Echo
的包。您可以使用 Laravel Echo 在前端收听您的广播,如下所示:
Echo.private('users.' + userId)
.notification((notification) => {
console.log(notification.type);
});
参考文档:https://laravel.com/docs/7.x/notifications#listening-for-notifications
在我的网络应用程序中,我想在管理员创建某些任务时通知某些特定用户。这应该是实时的。因此我使用了 laravel pusher。但这没有任何意义。我想解决这个问题。
我的控制器:
public function add(Request $request){
$data = $request->all();
$tasks = Todo::create($data);
//send notofications
$notifyTo = User::whereHas('roles', function($q){$q->whereIn('slug', [ 'manager' ]);})->get();
foreach ($notifyTo as $notifyUser) {
$notifyUser->notify(new TaskCreated($tasks));
}
}
我的任务创建通知Class
public function via($notifiable)
{
return ['broadcast'];
}
public function toBroadcast($notifiable)
{
return [
'title' => $this->tasks->task
];
}
我的 Pusher 调试控制台
这是我的boostrap.js
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key:'bf6e79cce8gfggf548fb2c5e9',
cluster: 'ap2',
forceTLS: true
});
这是我的前端
<script>
var userId = $('meta[name="userId"]').attr('content');
Echo.private('App.User.' + userId)
.notification((notification) => {
console.log(notification.type);
});
</script>
Config/broadcasting.php
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
//'options' => [
//'cluster' => env('PUSHER_APP_CLUSTER'),
//'encrypted' => true,
// 'host' => '127.0.0.1',
// 'port' => 6004,
// 'scheme' => 'http'
//],
'options' => [
'cluster' => 'ap2',
'useTLS' => true
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
我想在我的 laravel 网络应用程序中提醒通知标题。怎么可能?请提出前端解决方案。
您需要在用户模型中使用 Notifiable
特征。之后,您需要指定广播将使用的频道。为了使其唯一,在常量 channel_name 的末尾附加 user_id ,如下所示:
class User extends Authenticatable
{
use Notifiable;
/**
* The channels the user receives notification broadcasts on.
*
* @return string
*/
public function receivesBroadcastNotificationsOn()
{
return 'users.'.$this->id;
}
}
在前端,您需要使用一个名为 Laravel Echo
的包。您可以使用 Laravel Echo 在前端收听您的广播,如下所示:
Echo.private('users.' + userId)
.notification((notification) => {
console.log(notification.type);
});
参考文档:https://laravel.com/docs/7.x/notifications#listening-for-notifications