【问题标题】:Using the Model instead of the Controller for checking if data already exists for a user使用模型而不是控制器来检查用户的数据是否已经存在
【发布时间】:2013-01-22 02:00:52
【问题描述】:

所以我编写了一个标记 cmets 的标记功能,我正在检查我的控制器以查看用户是否已经标记了特定评论。问题是,我认为这可以在模型中完成。

函数是:

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'
    )
);

所以我想知道如何从现在开始在模型中做这样的事情,因为我有很多这样的代码更适合模型。

【问题讨论】:

  • 为什么是私有的?首先,您的项目中的方法永远不应该是私有的(仅受保护),因为它违背了框架的想法。其次,您可能希望有一天从控制器访问它 - 所以 public 也不会受到伤害,可能
  • 嗯,它只是从该控制器内部调用,这就是我将其设为私有的原因。不过,它现在已移至模型并公开。

标签: php cakephp cakephp-2.0 cakephp-model


【解决方案1】:

拥有胖模型是一种很好的做法。您在将上述功能转移到模型时遇到了什么问题?

将这些函数复制到您的模型中 (CommentsFlag) 并将所有 $this->CommentsFlag->find(... 替换为 $this->find(

因此,要从您的模型中调用上述函数,您可以使用:

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

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

【讨论】:

  • 很好,谢谢。那么控制器应该做什么呢?其中一些可以进入模型吗? pastebin.com/uYAupums
猜你喜欢
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2014-05-19
相关资源
最近更新 更多