0

所以我仍然掌握 CakePHP 的窍门,而且我一直在开发一个网站,该网站包括多个民意调查供人们投票。

基本上我有一张名为“条目”的表格,这是人们投票的主题。Entries 有一个名为“vote_value”的字段,它是一个整数,可以存储正值和负值。人们对这些条目进行投票,无论是+还是-,然后条目的投票值就会受到影响。

问题:我不确定修改 vote_value 字段的正确方法是什么。人们在条目索引上看到了一个向上和向下的箭头,我希望用该条目的新投票值刷新页面(或最终只是重新加载 vote_value 而不刷新)。

我曾考虑过制作一种方法来修改模型中的 vote_value 字段,但我相信这是打破 MVC 的核心。我是否必须为此在我的控制器中创建另一个操作?

任何帮助表示赞赏!

4

1 回答 1

1

是的,您需要为此在控制器中创建一个操作。您可能会在投票时通过 ajax 调用它,因此该操作需要使用 json 或 true 或 false 进行响应,您无需为此创建视图。就像是

class EntryController extends AppController {

     public function castVote($voteValue) {
         //some logic or whatever
         $this->Entry->changeValue($voteValue);

         //don't create view
         $this->autoRender = false;
         echo 'all ok or some other message';
         return;
     }
}

$this->Entry->changeValue($voteValue)是 Entry 模型中的一个函数,以防您需要在其他地方使用添加值的逻辑(例如,用户只能投票一次)。这样,您就可以重用代码。或者您可以在控制器中添加所有这些逻辑,但我建议不要这样做,最好使用胖模型而不是胖控制器。

如果您希望视图中的 ajax 更新新值,则不是一些随机消息,而是$this->Entry->changeValue($voteValue)返回实际值,并在控制器中将其回显到视图

//inside controller
$newValue = $this->Entry->changeValue($voteValue);
$this->autoRender = false;

//check that the value is a number, not boolean, so you know the update was valid
echo $newValue;
return;

根据您的解释,我已将功能放在入口模型和控制器中,但将功能放在您认为更符合逻辑的地方。

于 2013-08-02T15:52:33.203 回答