2012-03-17 48 views
0

因此,我编写了一个用于标记注释的标记功能,并且正在检查控制器以查看用户是否已经标记了特定注释。问题是,我认为这可以在模型中完成。使用模型而不是控制器来检查用户是否已经存在数据

功能是:

private function userAlreadyFlagged($userId, $commentId) { 
    $userAlreadyFlagged = $this->CommentsFlag->find('count', array(
     'conditions' => array('CommentsFlag.comment_id' => $commentId, 'CommentsFlag.user_id' => $userId) 
      )); 

    if ($userAlreadyFlagged > 0) { 
     return true; 
    } else { 
     return false; 
    } 
} 

然后我有另一个功能也被称为flagComment

if (!$this->userAlreadyFlagged($userId, $commentId)) { 
    if ($this->CommentsFlag->save($this->request->data)) { 
     $message = array('response' => 'success'); 
    } 
} else { 
    $message = array('response' => 'alreadyFlagged'); 
}​ 

我对CommentsFlag电流模式控制器内我users表链接到它:

var $name = 'CommentsFlag'; 
var $belongsTo = array(
    'User' => array(
     'className' => 'User' 
    ) 
); 

所以我想知道我该如何开始做类似这样的东西,因为我有很多像这样的代码更适合模型。

+0

它为什么是私人的?首先你的项目中的一个方法不应该是私有的(只有保护),因为它违背了框架的想法。其次你可能想在某一天从控制器访问它 - 所以公众也不会伤害它,可能是 – mark 2012-03-17 10:36:36

+0

那么它只是从该控制器内部调用,这就是为什么我将它私有。不过,现在它已经转移到了模型和公共领域。 – 2012-03-18 09:29:36

回答

1

这是一个很好的做法,有胖模型。在将上述功能转换为模型时,您面临什么问题?

复制这些功能集成到你的模型(CommentsFlag)和替换所有$this->CommentsFlag->find(...$this->find(

因此,调用上面的模型功能,您可以使用:

$this->CommentsFlag->userAlreadyFlagged()如果从CommentsFlag的控制器称为

$this->User->CommentsFlag->userAlreadyFlagged()如果从用户的控制器调用。

+0

很好,谢谢。那么控制器应该怎么做?这其中的一些能够进入模型吗? http://pastebin.com/uYAupums – 2012-03-18 09:29:09

相关问题