2012-03-05 65 views
0

我一直在想知道做到這一點的最佳方式是什麼。我有一個SubmissionsController,裏面有一個view()方法,它是每個提交的顯示。所有提交都有收藏夾,用戶可以對這些收藏進行投票。我想根據用戶之前是否投票表決來更改圖標。我想過這樣做:從視圖中調用控制器的方法CakePHP

// checkExistingFavorite would be a boolean method which returns true if the user has    already favorited it 
<?= if (SubmissionsController::checkExistingFavorite($userId, $submissionId)) { ?> 
<span style="favorited">Remove Favorite</span> 
<? } else { ?> 
<span style="not-favorited">Favorite</span> 
<? } ?> 

但顯然,我不應該直接從我的看法調用SubmissionsController。我的問題是處理這個問題的最佳方法是什麼?每次用戶查看提交時都需要檢查它,所以我不確定我是否應該緩存該提交?

+0

這是一個通常的設計錯誤。 你應該把這些方法放在你的模型中,而不是控制器。 – mark 2012-03-05 09:31:33

+0

如何從我的控制器中引用它們? var $ uses ='SubmissionsFavorite''然後'$ this-> SubmissionsFavorite-> methodFromSubmissionsFavoriteModel();'?> – 2012-03-05 09:48:10

+0

永遠不會使用:)使用ClassRegistry :: init()或loadModel()來代替。 PS:爲了回答這個問題,人們必須更多地瞭解checkExistingFavorite()方法。 – mark 2012-03-05 13:06:23

回答

1

這應該在相關的控制器方法中完成,否則你會違反支持Cake的MVC原則。您可以在Submission模型中創建checkExistingFavorite($userId, $submissionId)函數,以便它可用於所有控制器操作。

檢查用於使用所述函數在SubmissionsControllerview()的方法(通過調用$this->Submission->checkExistingFavorite()),你可以在視圖中的變量設置爲truefalse$this->set('hasExistingFavourite', $boolean))現有的收藏夾後。

+0

太好了!現在我將開始使用模型來控制我的控制器中使用的方法。我以前只是在控制器內部做它們。謝謝您的幫助。 – 2012-03-05 09:54:02

+0

沒問題!當我開始使用Cake時,本指南對我來說是一個巨大的幫助,它還詳細介紹了「胖模特,瘦控制者」 - 概括地說:http://bakery.cakephp.org/articles/Auzigog/2008/12/29/在那裏,應該 - 我的代碼,去 – mensch 2012-03-05 10:32:33

1

可以檢查在基於該控制器
這個條件設置一個標誌0或1,如果多個數據然後進行的標誌狀態
通此數組數組傳遞數組或值可以上查看
基設置這個條件
所以我們可以實現業務邏輯和表示邏輯不同

相關問題