Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用控制器';从视图CakePHP中删除的方法_Php_Cakephp_View_Controller_Cakephp 2.0 - Fatal编程技术网

调用控制器';从视图CakePHP中删除的方法

调用控制器';从视图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

我一直在想最好的办法是什么。我有一个SubmissionsController,其中有一个view()方法,它是每次提交的显示。所有提交都有收藏夹,用户可以对这些收藏夹进行投票。我想根据用户之前是否投票来更改图标。我考虑过这样做:

// 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()方法的知识。哦,太好了!现在,我将开始为控制器中使用的方法使用模型。我以前只是在控制器内执行这些操作。谢谢你的帮助,没问题!当我开始制作蛋糕时,这本指南给了我巨大的帮助,它还详细介绍了“胖模特,瘦控制器”——简单的概念: