微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据CakePHP中的MVC模式正确使用模型函数?

我可以在控制器中执行此操作:

$this->User->read(null,$id);
$this->User->find('list');

这是对的吗?

我正确使用MVC吗?

这些简单的功能可以在控制器中使用吗?或者,我是否需要在模型中创建这些函数?与Model-> getUser()一样,并且具有该函数使用Model-> read().

我知道它是由Model调用函数,但是,当我想传递一些参数,并且函数变大时,例如:

$this->User->find('all',array(
    'conditions' => array(
        'User.active' => true,'User.group_id' => 3,'User.age >=' => 18
    )
));

我可以在Controller中调用函数,还是需要在Model中创建自定义函数调用它?喜欢… $this-> User-> findSomeCustomFunction($param1,$param2,$param3)?

解决方法

TLDR:

从控制器调用find()是“没问题”,但最佳做法是将任何/所有find()放入模型中.

如果你养成了将所有find()放入模型中的习惯,那么从长远来看,这将使得维护代码变得更加容易.

说明/例子:

在这种情况下,作为一个例子,你可以从一个看似简单的函数开始:

//User model
public function getUsers() {
    return $this->find('list');
}

但是后来,也许你需要更多的东西:

//User model
public function getUsers($opts = array()) {
    $defaults = array(
        'findType' => 'all','activeOnly' => true,);
    $params = array_merge($defaults,$opts);
    $qOpts = array('conditions' => array());        

    //active only
    if(!empty($params['activeOnly'])) $conditions[$this->alias.'.active'] = 1;

    return $this->find($params['findType'],$qOpts);
}

(原谅如果有很多方法可以让代码变得更好 – 它只是我的头脑 – 它给你的想法.)

将所有find()保留在模型中还可以防止每次想要编写find()时搜索每个Controller,以确定是否在其他任何地方使用了类似的find().如果你是一个团队编程,这可能是一场噩梦,你几乎可以保证重复代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐