私はCakeとMVC全般に不慣れです。最初から良い習慣を身につけたい。良い習慣には、コントローラーをスリムに保ち、モデルをファットにすることがあります。しかし、私のような初心者にとっては、少し動くターゲットです。あるモデルから別のモデルに情報を渡す必要がある場合、そのすべてをコントローラーにダンプするだけですか? モデルで機能させてみませんか?
これは、私が整理しようとしている種類の混乱の典型的な例であるアクションです。
すべてがコントローラーにあるように見えますが、おそらく間違っています。このアクションはメンバーのリストを取得し、それをビューに送信します。ビューで、アカウントを「アクティブ化」したいメンバーにチェックマークを付けることができます。ACL はなく、単純な認証のみです。「サブ管理者」には、db フィールド client_id を使用して管理を許可されているユーザーのみが表示されるようにしています。私が使用している 2 つのモデルは、ユーザーとクライアントです。
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%じゃない感じが否めません。