如何根据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().如果你是一个团队编程,这可能是一场噩梦,你几乎可以保证重复代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |