是的,你需要在你的控制器中爲此創建一個動作。您可能會在投票時通過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)
東西是入門型號的內部功能,如果你需要使用邏輯添加值(比方說,一個用戶可以只投一次,例如)在別處。這樣,你可以重用代碼。或者你可以在控制器中添加所有的邏輯,但我會建議反對,最好是胖的模型比胖控制器。
如果你想在視圖中的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模型和控制器中,但把你感覺的功能放在更多的邏輯上。
由於什麼蛋糕實現甚至不與MVC設計模式遙相關,你應該停止擔憂「制動MVC」。它已經消失了。爲了投票,你可以創建鏈接(類似'「/ posts/12/upvote」'),改變'AppModel' activerecord參數。然後,爲了添加XHR支持,您可以簡單地遠程呈現HTML模板的部分。 –