所以我仍然掌握了CakePHP,我一直在开展一个包含多个民意调查的网站,供人们投票。
基本上我有一个名为“条目”的表,这是人们投票的主题。条目有一个名为“vote_value”的字段,它是一个可以存储正值和负值的整数。人们对这些条目进行投票,或者+或 - 然后条目的投票值会受到影响。
问题:我不确定修改vote_value字段的正确方法是什么。人们在条目索引上看到一个向上和向下箭头,我希望用该条目的新投票值刷新页面(或者最终只是重新加载vote_value而不刷新)。
我曾考虑过制作一个修改模型中的vote_value字段的方法,但我相信这是突破MVC的核心。我是否必须在我的控制器中为此创建另一个动作?
感谢任何帮助!
答案 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模型和控制器中,但将功能放在您认为更具逻辑性的位置。