2012-09-10 70 views
3

我在我的網站上有類似於facebook的通知。但我只有3個類型的通知:MVC - 此代碼是否屬於模型,控制器或視圖?

  • [暱稱]給你發送一個新的quize [quizename]
  • [暱稱]將你加入他的團隊[羣組]。接受|否認
  • 您今天收到100美元的積分。

表通知

notification_id |鍵入| item_id | from_id | to_id |創建|通知

item_id表示quize_id或group_id。我做額外的連接來獲取所有數據。

我有一個問題是如何顯示每個通知取決於類型。其中一個選項是組織字符串以便在控制器中顯示:

foreach($results as $key => $result){ 
    switch($result['type']){ 
    case 1: 
    $string = "<a href=".baseUrl()."https://stackoverflow.com/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>"; 
    break; 
    case 2: 
    $string = "<a href=".baseUrl()."https://stackoverflow.com/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>"; 
    break; 
    case 3: 
    $string = _("You received 100 credit for log in today"); 
    } 
    $notifications[$key]['string'] = $string; 
} 

$data['notifications'] = $notifications; 

$this->load->view('views/notifications/last_notification_view', $data); 

該方法的問題在於該部分視圖在控制器內部。我可以發送粗略的數據來查看,但問題是我需要製作類似的PHP代碼。那麼哪種方法更好?或者還有其他方法嗎?

+1

這是視圖邏輯,不要害怕在你的視圖上有這段代碼,只要確保控制器不會生成實際的字符串,但只傳遞必要的數據在視圖上創建它們。 – Mahn

回答

4

我個人的觀點是你應該將$結果傳遞給視圖,並且有一個循環獲取結果並打印視圖內的鏈接。你應該有這是控制器:

$data['notifications']=$results; 
$this->load->view('views/notifications/last_notification_view', $data); 

,並考慮到這點:

foreach($data['notifications'] as $key => $result){ 
    switch($result['type']){ 
    case 1: 
    echo "<a href=".baseUrl()."https://stackoverflow.com/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>"; 
    break; 
    case 2: 
    echo "<a href=".baseUrl()."https://stackoverflow.com/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>"; 
    break; 
    case 3: 
    echo _("You received 100 credit for log in today"); 
    } 
} 
+0

查看邏輯,我同意。但是,如果您打算將這些字符串打印在整個網站的不同位置(標題,側邊欄,...),我會考慮將其轉換爲自定義CI幫助程序,以保持乾燥。 – Mudshark

2

最好的選擇將創建一個真正的視圖,而不是使用templates

這段代碼顯然是表示邏輯的一部分,它是MVC設計模式中視圖的權限。不幸的是,CodeIgniter使用類似Rails的體系結構,這意味着您將不得不使用helpers,從而推動您距離MVC設計模式更遠。

+3

在配置項中,「視圖」只是模板,「模型」基本上只是一些邏輯à域對象的數據映射器。將此與「控制器」的強大範圍結合起來,我認爲作者已經遠離MVC模式,以至於使用幫助者不可能使他進一步*離開:] – orourkek

相關問題