久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

基于Laravel實現的用戶動態模塊開發

這篇文章主要給大家介紹了關于基于Laravel實現的用戶動態模塊開發的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面

前言

相信大家都知道,幾乎所有的社區應用都有用戶動態這個部分,用戶可以通過好友動態獲能取到更多感興趣的內容,從而提高社區活躍度和用戶粘性。它的實現相對來講比普通的內容發布要復雜一些,主要體現在內容多樣性上。

為了解決這個問題,我們得把這些不同類型的內容抽象,提取共性,使用相同的結構來處理,開發起來就會簡單很多。

概念抽象

用戶動態,顧名思義,動態的產生,就是一系列事件的歷史記錄,所以首先關注“事件”這個名詞,它有哪些屬性:

  • 觸發者,基于社區所有的事件幾乎都是由用戶觸發的
  • 事件主體,事件的主體信息,例如“xxx發布了文章” 中的 “文章”。
  • 事件屬性,事件主體不同,所需要的附加信息也不同,比如事件類型。
  • 發生時間,記錄事件產生的時間,當然了在我們的數據庫通常記錄了所有數據產生的時間。

我們將用戶動態抽象成只有 4 個基礎屬性的結構,就比較容易實現了:

- description    事件描述
- causer_id 或者 user_id 事件觸發者
- subject_id    主體 ID
- subject_type   主體類型
- properties    事件附加屬性
- created_at    事件產生時間

而主體部分就是 Laravel 里的 morph relation, 多態關聯。

怎么展示

我們的動態展示需求通常有以下幾種:

  • 我的好友的動態
  • 某個人的動態,通常是個人中心
  • 全部動態,比如 Laravel China 首頁的全部動態
  • 動態搜索,比較少見

我最近正在開發 EasyWeChat 新版網站,其中也有用戶動態,舉例:

xxx 發布了討論 《請問大家怎么使用 xxx》
xxx 評論了 xxx 的話題 《請問大家怎么使用 xxx》
xxx 回復了 xxx 的評論 “我是按照文檔上 ...”
xxx 購買了 《微信開發:自定義菜單的使用》
xxx 關注了 xxx
...

你會發現,基本上每種動態的寫法都不一樣,所以我們還需要記錄一個 “事件類型” ,比如 “關注”、 “發布”、“回復”、“購買”。

然后我們在 blade 或者其它模板引擎的使用中,就可以 switch ... case 寫法,來應用不同的模板渲染這些樣式,比如 blade 中,我的用法:

@switch($activity->properties['event'] ?? '')
 @case('discussion.created')
  ...
  @break
 @case('comment.created')
  ...
  @break
@endswitch

代碼實現

前面我們已經討論完了數據存儲以及展示方面的設計,接著就是怎么實現,如果你比較勤勞,可以原生實現,畢竟上面的實現方法已經描述清晰,寫點代碼實現就搞定了,今天我要推薦的是使用 spatie/laravel-activitylog 來實現:

安裝一直很簡單對吧:

$ composer install spatie/laravel-activitylog -vvv

記錄動態

activity()->log('Look, I logged something');

當然了這種記錄沒意義,幾乎沒有任何有用的信息,所以我們通常的用法應該是這樣:

activity()
 ->performedOn($anEloquentModel)
 ->causedBy($user)
 ->withProperties(['customProperty' => 'customValue'])
 ->log('Look, I logged something');
 
$lastLoggedActivity = Activity::all()->last();

$lastLoggedActivity->subject; //returns an instance of an eloquent model
$lastLoggedActivity->causer; //returns an instance of your user model
$lastLoggedActivity->getExtraProperty('customProperty'); //returns 'customValue'
$lastLoggedActivity->description; //returns 'Look, I logged something'

方法介紹:

  • performedOn($model) 設置事件主體,也就是 Eloquent Model 實例
  • causedBy($user) 設置事件觸發者, User 實例
  • withProperties($properties) 上面我們概念里的事件屬性
  • withProperty($key, $value) 事件屬性的單個用法
  • log($description) 事件描述

比如,我們要記錄一條,用戶發布了討論:

$discussion = App\Discussion::create([...]);

activity()->on($discussion)
->withProperty('event', 'discussion.created')
->log('發表了話題');
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 欧美精品久久 | 91久久久久 | 国产精品成av人在线视午夜片 | 91麻豆精品国产91久久久久久 | 一区二区三区免费观看 | 福利精品 | 亚州影院 | 噜久寡妇噜噜久久寡妇 | 午夜羞羞 | 成人日韩| 久久久久无码国产精品一区 | 亚洲国产黄| 日韩一二三| 日本精品视频在线观看 | 91欧美精品成人综合在线观看 | 欧美精品中文字幕久久二区 | 欧美精品在欧美一区二区 | 亚洲综合区| 国产在线永久免费 | 中文字幕一区二区三区乱码图片 | wwwxxx日本在线观看 | 久久1区 | 日韩毛片中文字幕 | 国产视频二区 | 国产精品一区二区在线播放 | 久久久久国产 | 91毛片在线观看 | 日本在线网站 | 天堂一区二区三区 | 国产伦精品一区二区 | 国产美女在线观看 | 国产精品久久久久久一区二区三区 | 日韩欧美在线免费观看视频 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 黄色一级片在线播放 | 免费观看一级毛片 | 成人av鲁丝片一区二区小说 | 国产精品久久av | 日韩精品极品视频在线观看免费 | 久久影音先锋 | 色精品 |