通过View修改MySQL记录

时间:2013-08-02 14:51:10

标签: php cakephp

所以我仍然掌握了CakePHP,我一直在开展一个包含多个民意调查的网站,供人们投票。

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

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

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

感谢任何帮助!

1 个答案:

答案 0 :(得分: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;

我已根据您的解释将这些功能放入Entry模型和控制器中,但将功能放在您认为更具逻辑性的位置。