我可以在控制器中执行此操作:
$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 举报,一经查实,本站将立刻删除。