我是 Cake 的新手,一般来说也是 MVC 的新手。我想从一开始就养成良好的习惯。良好的习惯包括让控制器保持苗条,并使模型变胖。但对于像我这样的菜鸟来说,这有点移动目标。如果我需要将信息从一个模型传递到另一个模型,我是否只需将所有这些信息都转储到控制器中?试着让它在模型中工作?
这是一个动作,它是我试图解决的那种混乱的一个典型例子。
一切似乎都应该在控制器中,但我可能错了。此操作获取成员列表,将其发送到视图。在视图中,我可以勾选我想要“激活”其帐户的成员。没有 ACL,只是简单的身份验证。我确保“子管理员”只能通过使用 db 字段 client_id 看到他们被允许管理的用户。我使用的两个模型是用户和客户端。
public function activate() {
if ($this->request->is('get')) {
$id = $this->Auth->user('id');
$this->User->id = $id; //make sure current User is the logged in user
$currentClient = $this->User->field('client_id'); // get client_id based on logged in user
$members = $this->User->Client->find('first', array( // find users that have the same client_id
'conditions' => array('id' => $currentClient),
'recursive' => 1
));
$this->set('clients', $members); // send the users to the view
} else if ($this->request->is('post') || $this->request->is('put')) {
$members = $this->request->data['Members']; // grab players submitted from push form
$memberIds = array(); // this will hold the selected users
foreach($members as $a){
$memberIds[$a['id']] = $a['id']; // loop over user's that were selected
}
$usersToActivate = $this->User->find('all', array( //find user records, based on the array of id's
'conditions' => array(
"User.id" => $memberIds
)
));
$this->Ticket->bulkActivate($usersToActivate); // send array of members into model for processing
$this->Session->setFlash('Activations sent.', 'default', array('class' => 'success'));
$this->redirect(array('action' => 'index'));
}
}
在我看来,它看起来并没有大错特错......而且我已经在模型中进行了一些处理(如实际获取用户记录并生成激活票证的 bulkActivate 所示)。
但我不禁觉得它还不是 100%。