2013-07-14 24 views
1

我正在使用CakePHP很長一段時間,並且認爲我對mvc原理有很好的理解。但今天,我遇到了一個小問題,我現在不用如何解決,而堅持mvc。修改Helper或Component的數據庫行 - 哪個更好?

在我的數據庫中,有一張用於表達我的視圖的變體。它很像A/B測試。在顯示我的視圖時,我需要選擇保存在數據庫中的其中一個變體。

所以,在我看來,需要有這樣的事情:

<?php 
    $variant = $this->Helper->getVariant(); 

    switch($variant) { 
     case 'a': 
      echo "some link or content"; 
      break; 
     case 'b': 
      echo "some other content"; 
      break; 
    } 
?> 

但通過訪問getVariant(),所選擇的變體具有在數據庫中進行更新,視圖的數量必須進行更新。這就是爲什麼我不想在Controller中使用getVariant(),因爲它只能在View實際需要時運行。由於邏輯(控制器)和顯示器(視圖)是分開的,因此我無法在控制器中確定是否需要getVariant()。該怎麼辦?

+0

某些代碼可能? – Wh1T3h4Ck5

+0

還沒有編碼。我還沒有開始編碼。但是我會在我的問題中添加一些僞代碼。 –

+0

我再次修改了這個問題,現在它更短,並解釋一切好一點。我希望這沒關係。 –

回答

1

在您的控制器中創建一個更新數據庫的操作。然後在視圖中使用Ajax來調用該函數,而無需刷新或更改頁面。

+0

但是如果JavaScript在瀏覽器中被禁用呢?另外它會導致數據庫稍微延遲更新。爲什麼向控制器發送一個ajax-call(用戶很容易禁用或操作)比在helper中包含一個Model更好? –

+2

使用一個圖像信標(一個圖像,指向顛倒計數器的動作),然後不需要js – AD7six

+0

@LarsEbert MVC的全部目的是將數據庫和邏輯從表示中分離出來。助手是表示層的一部分。它們的作用是保存由多個視圖共享的表示元素,而不是保存與數據庫/邏輯相關的代碼。 – Phillaf

相關問題