Laravel——消息通知

更新时间:2023-07-01 19:26:38 阅读: 评论:0

Laravel——消息通知
有的时候,在做⼀些业务的时候,可能会遇到这么个需求。那就是,别⼈评论了你的某个东西,或者是关注你,再或者是收藏了你的⽂章,那么作者,应该是需要被通知⼀下,以展现⼀下作者该有的成果,也可以满⾜⼀下作者⼩⼩的虚荣⼼嘛。
Laravel其实内部就⾃带消息通知的。接下来就看看是怎么使⽤的。
创建消息notifications表,并且给⽤户增添字段notification_count
消息表,⽏庸置疑是给⽤来记录消息内容的——是谁在哪篇⽂章哪个时间评论了哪个作者的,对吧。那么notifiation_count是记录⽤户有⼏条消息是未读的对吧。 下⾯操作。
1. 跑命令⾃动⽣成notification迁移表命令
php artisan notification:table
复制代码
会⽣成 databa/migrations/{$timestamp}_create_notifications_table.php 迁移⽂件,再执⾏下⾯命令将表添加到数据库⾥。
php artisan migrate
复制代码
2. 给urs表添加字段,⽤来跟踪⽤户未读的消息,到时候就可以判断是否⼤于0,来是否显⽰出来。跑命令
php artisan make:migration add_notification_count_to_urs_table --table=urs
复制代码
这样在databa的migration下就会⽣成这个迁移⽂件。进⾏添加想要的字段
<?php
u Illuminate\Support\Facades\Schema;
u Illuminate\Databa\Schema\Blueprint;
u Illuminate\Databa\Migrations\Migration;
小动物图片大全class AddNotificationCountToUrsTable extends Migration
{
public function up()
{
Schema::table('urs', function (Blueprint $table) {
$table->integer('notification_count')->unsigned()->default(0);
});
}
public function down()
{
Schema::table('urs', function (Blueprint $table) {
$table->dropColumn('notification_count');
});
}
}
复制代码
应⽤到数据库修改,跑迁移命令,那么urs表⾥就会增加⼀条notification_count字段
豹纹内衣php artisan migrate
复制代码
⽣成通知类
1. ⾸先,跑以下命令⾃动在app\Notifications⾥创建通知类。
php artisan make:notification TopicReplied
复制代码
2. 修改⽂件以下 app/Notifications/TopicReplied.php
阿里山小吃打一字<?php
namespace App\Notifications;
u Illuminate\Bus\Queueable;
u Illuminate\Notifications\Notification;
u Illuminate\Contracts\Queue\ShouldQueue;
u Illuminate\Notifications\Messages\MailMessage;
u App\Models\Reply;
class TopicReplied extends Notification
{
u Queueable;
public $reply;
public function __construct(Reply $reply)
{
// 注⼊回复实体,⽅便 toDataba ⽅法中的使⽤
$this->reply = $reply;
}
public function via($notifiable)
{
// 开启通知的频道,因为是涉及数据库的通知,这⾥写databa        return ['databa'];
}
public function toDataba($notifiable)
{
$topic = $this->reply->topic;
//让其跳到评论对应的地⽅
$link =  $topic->link(['#reply' . $this->reply->id]);
// 存⼊数据库⾥的数据陪伴的文案
return [
'reply_id' => $this->reply->id,
'reply_content' => $this->reply->content,
'ur_id' => $this->reply->ur->id,
'ur_name' => $this->reply->ur->name,
'ur_avatar' => $this->reply->ur->avatar,
'topic_link' => $link,
'topic_id' => $topic->id,
'topic_title' => $topic->title,
];
}
}
复制代码
最后的toDataba⽅法接收$notifiable的实例参数并返回⼀个数组。 返回的数组会以json格式存储到notification表⾥的data字段中。
重写Ur模型的notify⽅法。
默认的Ur模型⾥⽤了trait——Notifiable的,它包含着⼀个可以⽤来发通知的⼀个⽅法notify(),该⽅法接收⼀个通知的实例作为参数。虽然notify()⽅法已经封装的很⽅便了,但是我们想要每次调⽤的时
候,让字段notification_count⾃动加⼀,这样就能跟踪⽤户未读通知了。
打开 app/Models/Ur.php
<?php
.
.
.
u Auth
class Ur extends Authenticatable {
u notifiable {
notify as protected laravelNotify;
}
雨巷课件
public function notify($instance) {
机械制图教程// 如果不是当前⽤户,就不必通知了
if($this->id == Auth::id()) {
return;
}
$this->increment('notification_count');
$this->laravelNotify($instance);
}
}
复制代码
这⾥就对notify⽅法进⾏了巧妙的重写,这样,每次调⽤的时候,notification_count会⾃动 + 1。
共产主义的含义
触发通知
那么触发的话,肯定就是在⽐如别的⽤户评论了作者的某篇⽂章,也就是replyController⾥进⾏store⽅法存储的时候,触发。
public function store(Reply $reply)
{
.
.
$topic = $reply->topic;
$topic->increment('reply_count', 1);
// 通知作者话题被回复了
$topic->ur->notify(new TopicReplied($reply));
}
复制代码
将通知的数据进⾏获取并渲染
1. 编写消息通知的路由
Route::resource('notifications', 'NotificationsController', ['only' => ['index']]);
复制代码
2. 新建NotificationsController的控制器,为了⽅便对通知的管理,这⾥就新建控制器,跑命令⾃动⽣成。
php artisan make:controller NotificatioonsController
复制代码
3. 在控制器⾥写逻辑代码
<?php
namespace App\Http\Controllers;
u Illuminate\Http\Request;
u Auth;
class NotificationsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
// 获取登录⽤户的所有通知
$notifications = Auth::ur()->notifications()->paginate(20);
return view('notifications.index', compact('notifications'));
}
}
复制代码
4. 这⾥⾯值得注意的是,$notifications⾥循环出来的数据,渲染的时候需要加上$notification->data然后在后⾯继续跟上想要的数据。
<div class="infos">
<div class="media-heading">
<a href="{{ route('urs.show', $notification->data['ur_id']) }}">{{ $notification->data['ur_name'] }}</a>
评论了
蹑景<a href="{{ $notification->data['topic_link'] }}">{{ $notification->data['topic_title'] }}</a>
{{-- 回复删除按钮 --}}
<span class="meta pull-right" title="{{ $notification->created_at }}">
<span class="glyphicon glyphicon-clock" aria-hidden="true"></span>
{{ $notification->created_at->diffForHumans() }}
</span>
</div>
<div class="reply-content">
{!! $notification->data['reply_content'] !!}
</div>
</div>
复制代码
以上就是通知消息的基本过程啦~~ 参考书籍《》,想学的⼩伙伴可以看看~

本文发布于:2023-07-01 19:26:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1072713.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:通知   消息   作者   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图