修正内容の解説:コントローラ編
以上でタスクの完了,
indexアクション:ステータスを指定してタスクを取得する
function index() {
$this->set('yet_tasks', $this->Task->findAllByStatus('yet', null, 'Task.created ASC'));
$this->set('done_tasks', $this->Task->findAllByStatus('done', null, 'Task.modified DESC'));
}
findAllBy[フィールド名]メソッドによってstatusフィールドの値を指定してレコードを取得しています。
doneアクション:タスクを完了する
タスクの完了は
function done($id) {
アクションの定義に引数を設定すると
if ($this->Task->findById($id)) {
$this->Task->id = $id;
$this->Task->save(array('status' => 'done'));
}
このブロックでは,
$this->redirect('/tasks');
タスクの完了画面は出さずに即座にタスク一覧に戻すため,
editアクション:編集画面の表示と編集内容の保存を行う
editアクションは少々複雑で,
function edit($id) {
$task = $this->Task->findById($id);
if (!$task) {
$this->redirect('/tasks');
return;
}
引数で渡されてきたidでデータ取得を試みて,
if (!empty($this->data)) {
$task['Task']['content'] = $this->data['Task']['content'];
$this->Task->save($task);
}
データの存在チェックが通り,
$this->set('task', $task);
最後にビューへTaskモデルのデータを渡して終了です。
delアクション:タスクを削除する
delアクションはタスクを削除し,
function del($id) {
$this->Task->del($id);
$this->redirect('/tasks');
}
データの削除はモデルのdelメソッドにidを渡すことで行います。
ちなみにここではあえてデータの存在チェックを行っていません。削除行為自体はデータがあってもなくても行えるため,