CakePHP的成就和声誉体系


CakePHP achievements and reputation system

这是以前在Stack Overflow上问过的问题,但我没有看到任何与CakePHP相关的内容,所以我对这个主题领域仍然很困惑。

所以我有一个应用程序,允许用户,帖子和评论。用户可以创建帖子并对帖子发表评论。很简单的东西。

我想做的是添加两个功能(彼此无关):

  • 成就/徽章
  • 声誉

一般的想法是,当用户做一些事情,比如创建一个帐户,创建一个帖子10次,或者删除帖子等等。这会增加或耗尽声誉。并且如果满足特定标准,则创建徽章或成就。

我认为这是有效的,是有一个成就表:

id
title
description
image

以及关系表

id
achievement_id
user_id
date

然后用户将在用户表中有一个滚动整数作为信誉。

我感到困惑的部分是,当满足标准时,何时以及如何创建这些记录,而不必在我的所有方法中插入大量逻辑来检查各种事情等。

例如,如果我有一个简单的add-post方法,我将如何实现以下目标:

  1. 每成功发布一篇帖子,用户信誉增加10分
  2. 为首次发布的用户添加徽章
  3. 为用户添加徽章第10个帖子

棘手的部分是第10个帖子的成就,因为每次发布帖子时,我似乎都需要某种方法来检查用户还发布了多少其他帖子,以及它是否匹配一个数字,但这个数字需要从比实际代码更好的地方提取。也许是另一张包含规则的表?例如

id
title
description

然后在成就表中有一个链接,比如rule_id来关联它,也许还有一个动作计数,所以它需要运行这么多次。。。

以这3项为例,最好的方法是什么,这样我就可以在应用程序中取得其他成就和声誉。需要针对蛋糕。

感谢

Cameron我认为你应该查看CakePhp事件系统或创建观察员来记录你的成就

关于"棘手的部分是10后成就":

这可以使用counterCache轻松完成。

有关此CakePHP功能的更多详细信息,请点击此处:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#countercache-缓存您的计数