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

基于Laravel實現(xiàn)的用戶動態(tài)模塊開發(fā)

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

前言

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

為了解決這個問題,我們得把這些不同類型的內(nèi)容抽象,提取共性,使用相同的結(jié)構(gòu)來處理,開發(fā)起來就會簡單很多。

概念抽象

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

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

我們將用戶動態(tài)抽象成只有 4 個基礎(chǔ)屬性的結(jié)構(gòu),就比較容易實現(xiàn)了:

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

而主體部分就是 Laravel 里的 morph relation, 多態(tài)關(guān)聯(lián)。

怎么展示

我們的動態(tài)展示需求通常有以下幾種:

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

我最近正在開發(fā) EasyWeChat 新版網(wǎng)站,其中也有用戶動態(tài),舉例:

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

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

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

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

代碼實現(xiàn)

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

安裝一直很簡單對吧:

$ composer install spatie/laravel-activitylog -vvv

記錄動態(tài)

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) 設置事件觸發(fā)者, User 實例
  • withProperties($properties) 上面我們概念里的事件屬性
  • withProperty($key, $value) 事件屬性的單個用法
  • log($description) 事件描述

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

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

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

相關(guān)文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗證規(guī)則的優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現(xiàn)了一個功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實現(xiàn)前后臺登陸的相關(guān)資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統(tǒng)一的 API,下面這篇文章通過源碼分析給大家介紹了關(guān)于 Laravel 重復執(zhí)行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關(guān)于 Laravel Redis 多個進程同時取隊列問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 国产精品一区二区三区不卡 | 天堂成人av| 一区二区三区免费在线观看 | 一区二区三区影视 | 欧美日韩国产在线播放 | 午夜性视频 | 国产精品av一区二区 | 日韩视频在线观看 | 久久青草视频 | 亚洲精品一区二区三区在线 | 亚洲精品久久久久久久久 | 婷婷激情综合网 | 成人在线免费观看视频 | 日本美女毛茸茸 | 谁有毛片网址 | 久久av一区二区 | 无套内谢的新婚少妇国语播放 | 亚洲精品乱码久久久久久蜜桃91 | 高清一区二区三区 | 午夜无遮挡 | 五月天一区二区 | 国产小视频网站 | 久久精品2 | 成人午夜毛片 | 欧美日韩国产片 | 免费性爱视频 | 天堂网中文 | 国产精品hd | 五月婷婷色综合 | 福利小视频在线观看 | 午夜天堂av| 99亚洲精品 | 女人av在线| 亚洲一区二区免费看 | 亚洲毛片av| 中文字幕影院 | 岛国av在线播放 | 久艹视频在线观看 | 日韩久久久久久久 | 日韩国产一区 | 国产色自拍 |