加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:44:32 所属栏目:PHP教程 来源:网络整理
导读:我可以在控制器中执行此操作: $this-User-read(null,$id);$this-User-find('list'); 这是对的吗? 我正确使用MVC吗? 这些简单的功能可以在控制器中使用吗?或者,我是否需要在模型中创建这些函数?与Model- getUser()一样,并且具有该函数使用Model- read().
我可以在控制器中执行此操作:

$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().如果你是一个团队编程,这可能是一场噩梦,你几乎可以保证重复代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读