位置: 编程技术 - 正文

基于Laravel实现的用户动态模块开发(laravel搭建)

编辑:rootadmin

推荐整理分享基于Laravel实现的用户动态模块开发(laravel搭建),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel基础,laravel开发规范,laravel实例,laravel运行原理,laravel使用了哪些设计模式,laravel实战教程,laravel实例,基于laravel的系统,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

相信大家都知道,几乎所有的社区应用都有用户动态这个部分,用户可以通过好友动态获能取到更多感兴趣的内容,从而提高社区活跃度和用户粘性。它的实现相对来讲比普通的内容发布要复杂一些,主要体现在内容多样性上。

为了解决这个问题,我们得把这些不同类型的内容抽象,提取共性,使用相同的结构来处理,开发起来就会简单很多。

概念抽象

用户动态,顾名思义,动态的产生,就是一系列事件的历史记录,所以首先关注“事件”这个名词,它有哪些属性:

触发者,基于社区所有的事件几乎都是由用户触发的 事件主体,事件的主体信息,例如“xxx发布了文章” 中的 “文章”。 事件属性,事件主体不同,所需要的附加信息也不同,比如事件类型。 发生时间,记录事件产生的时间,当然了在我们的数据库通常记录了所有数据产生的时间。

我们将用户动态抽象成只有 4 个基础属性的结构,就比较容易实现了:

而主体部分就是 Laravel 里的 morph relation, 多态关联。

怎么展示

我们的动态展示需求通常有以下几种:

我的好友的动态 某个人的动态,通常是个人中心 全部动态,比如 Laravel China 首页的全部动态 动态搜索,比较少见

我最近正在开发 EasyWeChat 新版网站,其中也有用户动态,举例:

你会发现,基本上每种动态的写法都不一样,所以我们还需要记录一个 “事件类型” ,比如 “关注”、 “发布”、“回复”、“购买”。

然后我们在 blade 或者其它模板引擎的使用中,就可以 switch ... case 写法,来应用不同的模板渲染这些样式,比如 blade 中,我的用法:

代码实现

前面我们已经讨论完了数据存储以及展示方面的设计,接着就是怎么实现,如果你比较勤劳,可以原生实现,毕竟上面的实现方法已经描述清晰,写点代码实现就搞定了,今天我要推荐的是使用 spatie/laravel-activitylog 来实现:

安装一直很简单对吧:

记录动态

当然了这种记录没意义,几乎没有任何有用的信息,所以我们通常的用法应该是这样:

方法介绍:

performedOn($model) 设置事件主体,也就是 Eloquent Model 实例 causedBy($user) 设置事件触发者, User 实例 withProperties($properties) 上面我们概念里的事件属性 withProperty($key, $value) 事件属性的单个用法 log($description) 事件描述基于Laravel实现的用户动态模块开发(laravel搭建)

比如,我们要记录一条,用户发布了讨论:

或者用户注册时,我要记录一条动态:

你会发现我都没有设置触发者,因为这个模块如果你没设置触发者默认就是当前登录用户。

展示动态

展示动态就是根据条件从数据库拿出来,这里使用包提供的模型类:SpatieActivitylogModelsActivity

use SpatieActivitylogModelsActivity;

接着就是遍历展示就好了。

一些经验与技巧

设置一个专门的动态观察者类来记录动态

代码如下:

然后我们去注册这个订阅类:

在 AppProvidersEventServiceProvider 中 $subscribe 中注册这个订阅类:

上面我们利用了 Eloquent 模型事件来监听模型的变化,当各种模型事件创建的时候我们调用对应的方法来记录动态,所以实现起来非常的方便。

在事件属性里记录关键信息

看到上面记录动态的时候你可能会问,只存储了 ID,这种多态关联,查询的时候会压力很大,比如,我们要将动态显示为:

安小超 发布了文章 《自定义菜单的使用》

我们如果只是存储了文章的 id 与类型,我们还需要查询一次文章表,才能得到标题用于显示,这样一个动态列表的话,可能会几十条 SQL 了,的确是这样的,我的解决方案是这样的:

其实我们的用户动态是不要求 % 精准的,所以,我如果在记录时把文章的标题一起存下来是不是就不用再查表了?其实就是,我们在动态列表需要展示的关键信息,比如标题这些一起用 withProperties 存起来,这样就一条 SQL 解决了动态列表问题。

这样的做法也有弊端,比如文章改了标题的时候,这里就不同步了,当然你也可以在文章修改时来改这个属性,不过我个人认为没有多大必要。毕竟动态就是记录了当时的情况,后来改标题了并没有什么问题。

OK,用户动态模块的开发就分享到这里,如果你有更高级的实现欢迎随时交流。

关于好友动态部分的实现,根据你的应用量级,以及好友关系的存储各有不同,大家自己集思广益即可,大部分都是先查好友关系再查动态,关联查询也可以,自己实现吧。

总结

标签: laravel搭建

本文链接地址:https://www.jiuchutong.com/biancheng/288240.html 转载请保留说明!

上一篇:PHP调用API接口实现天气查询功能的示例(php如何调用接口)

下一篇:如何通过View::first使用Laravel Blade的动态模板详解(如何通过手机号码查对方在哪里)

  • 小规模纳税人开普票要交税吗
  • 财务记录软件
  • 哪些费用可在缴纳医保
  • 减免申报表如何填
  • 固定资产折旧准予扣除是什么意思
  • 企业所有者权益科目有哪些
  • 业务员报销差旅费会计分录怎么做
  • 季初资产总额是1,季末是0怎么填
  • 想开饮品店
  • 增值税与普通发票的关系
  • 投资损益表该如何填列
  • 租别人厂房土地税房产税怎么交
  • 微信转账手续费怎么算
  • 企业增值税留抵退税新闻稿范文
  • 会计增长知识方面
  • 扣服装费的收入如何交增值税?
  • 滞留票的进项税能抵扣吗
  • 建筑施工企业清欠管理办法
  • 手撕发票怎么报销给单位,怎么打印抬头和日期
  • 资询服务收入算服务还是劳务
  • 金税盘的用户名
  • 多交的增值税怎么处理
  • 合并报表中营业利润不等于
  • 企业收到银行未收到怎么做账
  • 如何设置bios开关机
  • mac dash
  • 收到押金缴国库费怎么办
  • 铁路货物运输代理
  • 职工福利费会计科目走管理费用
  • 库存股的会计科目
  • 发财树的养殖方法和浇水视频
  • 商业企业收取的服务费
  • 免抵退税会计分录怎么写
  • 企业出售房产土地增值税怎么计算
  • 微信小程序实现灯泡开关效果
  • ps抠图怎样
  • 企业取得政府奖励资金如何用
  • 公对公退款必须退至原账户的规定
  • 个人收到承兑汇票
  • 新会计准则规定
  • 增值税直接计算法间接计算法举例
  • 小微企业金融免税政策
  • 研发支出资本化支出在资产负债表哪里体现
  • 什么是全面预算控制?全面预算控制的作用有哪些?
  • 支付销售商品运费
  • 现在勾选认证是可以下月初认证?
  • 电商账务怎么做
  • 实收资本或股本什么意思
  • 固定资产清理营业外支出可在税前扣除?
  • 投资性房地产与持有待售资产的区别
  • 暂估固定资产的账务处理
  • 营业外收入的账户结构
  • 免征增值税还要计提附加税吗
  • 会务费发票开普票还是专票
  • 事业单位应设置事业收入科目
  • Mysql 报Row size too large 65535 的原因及解决方法
  • 快速调用cmd
  • 苹果电脑dock栏是什么意思
  • 硬盘读盘慢修复
  • 两台mac怎么同步
  • Win10 Mobile RS2预览版14904升级截图曝光
  • win8打游戏卡吗
  • xp如何更新
  • windows修复失败
  • win8搜索不到自己家的WiFi
  • linux中的vi编辑器一般有哪三个模式
  • javascript数据结构与算法 pdf
  • 安卓listview的用法
  • 用于播放html5视频文件的正确
  • 浏览器隐藏用法
  • opengl learn
  • 有关中秋节的古诗
  • jquery日期插件
  • input按钮的事件处理大全
  • js阻止浏览器后退
  • 北京电子税务
  • 深圳营业执照办理咨询电话
  • 非正常户纳税人解除
  • 税务师事务所企业组织架构
  • 为什么专利转让要交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设