调用控制器';从视图CakePHP中删除的方法
我一直在想最好的办法是什么。我有一个SubmissionsController,其中有一个view()方法,它是每次提交的显示。所有提交都有收藏夹,用户可以对这些收藏夹进行投票。我想根据用户之前是否投票来更改图标。我考虑过这样做:调用控制器';从视图CakePHP中删除的方法,php,cakephp,view,controller,cakephp-2.0,Php,Cakephp,View,Controller,Cakephp 2.0,我一直在想最好的办法是什么。我有一个SubmissionsController,其中有一个view()方法,它是每次提交的显示。所有提交都有收藏夹,用户可以对这些收藏夹进行投票。我想根据用户之前是否投票来更改图标。我考虑过这样做: // checkExistingFavorite would be a boolean method which returns true if the user has already favorited it <?= if (Subm
// 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>
<? } ?>
//checkExistingFavorite是一个布尔方法,如果用户已经喜欢它,它将返回true
删除收藏夹
最喜欢的
但是很明显,我不应该直接从我的视角给SubmissionsController打电话。我的问题是处理这个问题的最好方法是什么?但每次用户查看提交时都需要检查它,所以我不确定是否应该缓存它?您可以在控制器中检查此条件
基于此设置一个标志0或1,若有多个数据,则创建标志状态数组
将此数组传递给视图
根据传递的数组或值,您可以设置此条件
因此,我们可以实现业务逻辑和表示逻辑是不同的这应该在相关的控制器方法中完成,否则您将违反支撑Cake的MVC原则。您可以在
Submission
模型中创建checkExistingFavorite($userId,$submissionId)
函数,以便所有控制器操作都可以使用该函数
使用
SubmissionsController
的view()
方法中的函数检查现有收藏夹(通过调用$this->Submission->checkExistingFavorite()
)后,可以将视图的变量设置为true
或false
($this->set('hasExistingFavorite',$boolean)
).这通常是设计错误。你应该把这些方法放在你的模型中,而不是控制器中。我如何从控制器中引用它们var$使用='SubmissionsFavorite'
,然后使用$this->SubmissionsFavorite->methodfromssubmissionsfavoritemodel()代码>?>永远不要使用:)改用ClassRegistry::init()或loadModel()。PS:要回答这个问题,你必须了解更多关于checkExistingFavorite()方法的知识。哦,太好了!现在,我将开始为控制器中使用的方法使用模型。我以前只是在控制器内执行这些操作。谢谢你的帮助,没问题!当我开始制作蛋糕时,这本指南给了我巨大的帮助,它还详细介绍了“胖模特,瘦控制器”——简单的概念: