CakePHPの使い方の基本として、この記事では追加・編集・削除をやってみます。前回のCakePHPでデータの一覧表示をさせてみるの記事ではデータベースとコントローラーを繋げて、そこからビューへ渡すところまでをやりました。
この記事ではデータベースの基本操作となる追加・編集・削除までを実装してみます。
データの追加をやってみる
前回までで以下のような一覧表示ができました。
この一覧の下に追加ボタンを設置してデータの入力フォーム画面を表示したいと思います。前回作ったindex.ctpに以下のようにリンクを追加します。
<h2>記事の追加</h2>
<?php
//HTMLヘルパーのlinkメソッドを使用
echo $this->Html->link('記事の追加',array('action'=>'add'));
?>
この1行でデータの追加フォームへのリンクが出来ました。HTMLヘルパーを使うことでリンクの文字、リンク先などほかにもいろいろ設定できます。
次は追加フォームのViewとControllerを実装します。View->Memoフォルダにadd.ctpというViewを作成しました。ViewとContorollerの記述は以下のようになります。
//View
<h2>入力フォーム</h2>
<?php
echo $this->Form->create('Memo'); //create('モデル名',array(その他))
echo $this->Form->input('title'); //input('カラム名',array(その他))
echo $this->Form->input('text');
echo $this->Form->end('入力');
//Controller
public function add()
{
if($this->request->is('post')) //postでリクエストが来た場合
{
if($this->Memo->save($this->request->data)) //データベースに保存
{
$this->Session->setFlash('入力完了'); //成功したら入力完了と表示
$this->redirect(array('action'=>'index')); //続けてindexページを表示
}
else
{
$this->Session->setFlash('入力失敗'); //失敗したら入力失敗と表示
}
}
}
これでうまくいくはずなので、画面をみてみましょう。indexに表示されたリンクをクリックするとフォームが表示され、入力もうまくいきました。
データの編集機能を実装する
データの編集も追加と同じように作っていきます。フォーム画面へのリンクは各タイトルの横に、フォーム画面には選択したデータを送信するように設定します。
//View index.ctp
//link('ラベル名',array('リンク先',送信するデータ));
<?php echo $this->Html->link('編集',array('action'=>'edit',$memo['Memo']['id'])); ?>
//View edit.ctp
<h2>データ更新</h2>
<?php
//基本的にはadd.ctpと同じ
echo $this->Form->create('Memo');
echo $this->Form->input('title');
echo $this->Form->input('text');
echo $this->Form->end('更新');
//Controller
public function edit($id = null)
{
$this->Memo->id=$id;
if($this->request->is('get'))
{
$this->request->data=$this->Memo->read(); //更新画面の表示
}
else
{
if($this->Memo->save($this->request->data)) //データの入力処理、addと同じ
{
$this->Session->setFlash('更新完了');
$this->redirect(array('action'=>'index'));
}
else
{
$this->Sessin->setFlash('更新失敗');
}
}
}
表示されるかチェックしてみましょう。indexをブラウザで開くと編集のリンクが追加されています。
それをクリックすると、きちんとデータも引っ張ってこれてますね。
これでデータの編集が無事できるようになりました。
データの削除を実装する
最後にデータの削除機能を実装していきます。編集と同様、各データごとに削除ボタンを設置します。削除にはViewがないためdelete.ctpは作成しません。index.ctpとControllerのみ使います。
//index.ctp
//編集とほぼ同じ、ラベルとアクションが違うだけ
<?php echo $this->Html->link('削除',array('action'=>'delete',$memo['Memo']['id'])); ?>
//Controller
public function delete($id=null)
{
$this->Memo->id=$id;
if($this->Memo->delete()) //データの削除、addと同じ
{
$this->Session->setFlash('削除完了');
$this->redirect(array('action'=>'index'));
}
else
{
$this->Sessin->setFlash('削除失敗');
}
}
では結果をみてみましょう。リンクはきちんと出力されてます。
削除もOK。
まとめ
今回もかなり大雑把に実装してみましたが、こんなに簡単なコードで基本的な機能を実装できるとわかりました。これを一から作るとなると・・・なのでフレームワークは非常にありがたい存在ですね。
ここまででCakePHPの初歩的なとろこは理解できたので、あとはひたすら作るのみ。View作って、Contorollerと紐づけて、必要に合わせてModelもいじる。これだけで簡単なアプリケーションならすぐに作れてしまいます。