CakePHPの使い方 追加・編集・削除をやってみる

Pocket

CakePHPの使い方の基本として、この記事では追加・編集・削除をやってみます。前回のCakePHPでデータの一覧表示をさせてみるの記事ではデータベースとコントローラーを繋げて、そこからビューへ渡すところまでをやりました。

この記事ではデータベースの基本操作となる追加・編集・削除までを実装してみます。

データの追加をやってみる

前回までで以下のような一覧表示ができました。
cakephp-second03
この一覧の下に追加ボタンを設置してデータの入力フォーム画面を表示したいと思います。前回作った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に表示されたリンクをクリックするとフォームが表示され、入力もうまくいきました。
cakephp-third01
cakephp-third02

データの編集機能を実装する

データの編集も追加と同じように作っていきます。フォーム画面へのリンクは各タイトルの横に、フォーム画面には選択したデータを送信するように設定します。

//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をブラウザで開くと編集のリンクが追加されています。
cakephp-third03
それをクリックすると、きちんとデータも引っ張ってこれてますね。
cakephp-third04
cakephp-third05
これでデータの編集が無事できるようになりました。

データの削除を実装する

最後にデータの削除機能を実装していきます。編集と同様、各データごとに削除ボタンを設置します。削除には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('削除失敗');
    }
}

では結果をみてみましょう。リンクはきちんと出力されてます。
cakephp-third06
削除もOK。
cakephp-third07

まとめ

今回もかなり大雑把に実装してみましたが、こんなに簡単なコードで基本的な機能を実装できるとわかりました。これを一から作るとなると・・・なのでフレームワークは非常にありがたい存在ですね。

ここまででCakePHPの初歩的なとろこは理解できたので、あとはひたすら作るのみ。View作って、Contorollerと紐づけて、必要に合わせてModelもいじる。これだけで簡単なアプリケーションならすぐに作れてしまいます。

  • Pingback: CakePHPの基本 データを一覧表示させる方法 | Designup()

  • rm

    editコントローラで【 $this->Memo->id=$id;】の部分は、どういった意味があるのでしょうか?

    大変参考にさせていただいております。

    何卒、ご返答お願い致します。

    • takeshi-du

      結構前に書いたことなので間違ってるかもしれませんが(;´Д`)
      これから操作するもの($id)をテーブルと紐づけてるんだと思います。

      memoテーブルのid=これから操作するid みたいな感じで

      • rm

        ご返信有難うございます。メールまでしてしまい、大変失礼致しました。

        takeshi-du様のサンプル大変参考にさせていただいており、こちらでも、サンプルを元に、掘り下げながら、勉強しております。

        また、ご質問させて頂くことあるかと存じますが、何卒、宜しくお願い致します。

  • Pingback: CakePHPでブログシステムを作ってみる(5/5) | WebNote()