2013-08-02 102 views
0

所以我仍然得到了CakePHP的竅門,並且我一直在一個包含多個民意調查投票的網站上工作。通過視圖修改MySQL記錄

基本上我有一張名爲「條目」的表格,它們是人們投票的主題。條目具有稱爲「vote_value」的字段,該字段是可以存儲正值和負值的整數。人們對這些條目進行投票,無論是+還是 - 條目的投票值都會受到影響。

問題:我不確定修改vote_value字段的正確方法是什麼。人們在條目索引上看到了一個向上和向下的箭頭,我希望能夠用該條目的新投票值刷新頁面(或者最終只重新加載vote_value而不刷新)。

我曾考慮過修改模型中的vote_value字段的方法,但我認爲這是硬核打破了MVC的觀點。爲了這個,我必須在控制器中創建另一個動作嗎?

任何幫助表示讚賞!

+0

由於什麼蛋糕實現甚至不與MVC設計模式遙相關,你應該停止擔憂「制動MVC」。它已經消失了。爲了投票,你可以創建鏈接(類似'「/ posts/12/upvote」'),改變'AppModel' activerecord參數。然後,爲了添加XHR支持,您可以簡單地遠程呈現HTML模板的部分。 –

回答

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)東西是入門型號的內部功能,如果你需要使用邏輯添加值(比方說,一個用戶可以只投一次,例如)在別處。這樣,你可以重用代碼。或者你可以在控制器中添加所有的邏輯,但我會建議反對,最好是胖的模型比胖控制器。

如果你想在視圖中的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模型和控制器中,但把你感覺的功能放在更多的邏輯上。

+0

工作就像一個魅力!接下來我只需要弄清楚如何正確使用ajax哈哈......總之,謝謝! – div