libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

データの追加・更新・削除 (1/3)

作成:2011-11-28 08:00
更新:2011-12-06 19:44

■データを追加する

前回、データの検索について一通り説明しました。今回は、データの追加や更新、削除といった操作について説明していきましょう。まずは、データの追加からです。

データの追加は、まずフォームを用意しておき、それを送信して受け取った値を元にModelのインスタンスを作成し、保存する、といった作業になります。ただし、これは実は思ったほど面倒ではありません。

まず、フォームの作成ですが、これはビューの.ctpファイル内に、Form Helperを使って簡単に作成できます。Form Helperについては既に使ってみましたが、Modelのデータを扱うためのフォームは、非常に簡単に作ることができます。また、Form Helperで作成したフォームを受け取るアクションメソッド側の処理も、Modelインスタンスの作成と保存はごく簡単に行えるようになっています。実例を上げてコードを見ていきましょう。

下のリスト欄に、MySampleDataへのデータ追加をするためのaddアクションのソースコードを掲載しておきました。「View」の「MySampleDatas」フォルダ内に「add.ctp」ファイルを作成して「※add.ctp」部分のソースコードを記述してください。また、MySampleDatasControllerクラスに、「※addアクションメソッド」のaddメソッドを追加して下さい。これで、http://…略…/my_sample_datas/addにアクセスすると、フォームが表示されます。フォームに適当に内容を書きこんで送信すれば、そのデータがデータベースに追加されます。

まず、add.ctpForm Helper利用部分を見てください。ここではMySampleDataモデルのためのフォームを作成するのに、以下のようにしてフォーム生成を行なっていることがわかるでしょう。
echo $this->Form->create(Model名の指定);
これで、そのモデルのデータを扱うための<form>タグが生成されます。後は、必要な項目は「$this->Form->input(項目名);」として記述していき、最後にendで送信ボタン名を指定すれば完了です。実に簡単ですね。

さて、アクションメソッド側の処理を見ましょう。Form HelpercreateModel用のフォームを作成した場合、フォームはこのアクション自身に送信される、ということを知っておく必要があります。つまり、addにアクセスして表示されたフォームは、このadd自身に送られるのです。したがって、普通にアクセスしたのか、フォームから送信されたのかをチェックし、フォーム送信でアクセスされた場合はデータを保存する、というように処理を剃る必要があります。

これには、$this->request->is('post')を利用します。これは、POST送信されたか否かを調べるメソッドです。通常、そのままページにアクセスした際には「GET」という方式でアクセスを行いますが、Form Helperで生成されたフォームを送信した際には「POST」という方式でアクセスされます。つまり、POST送信されていたなら、フォームから送信されたと考えていいわけです。

では、送信されたフォームのデータからModelを作成し、保存する処理を見てみましょう。これは信じられないくらい簡単です。
$this->Modelクラス->save($this->request->data);
コントローラーでは、$thisModelクラスと同名のプロパティが用意され、そこにModelが設定されていました。この「save」を呼び出すと、新しいデータを保存します。引数には、$this->request->dataを指定します。このdataには、送信されたフォームの情報がまとめられています。たったこれだけで、送信したデータをデータベースに保存することができてしまうのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※add.ctp

<h1>Add Page</h1>
<p>MySampleData Add Form.</p>
<?php
  echo $this->Form->create('MySampleData');
  echo $this->Form->input('name');
  echo $this->Form->input('mail');
  echo $this->Form->input('tel');
  echo $this->Form->end('Submit');
?>


※addアクションメソッド

  public function add() {
    // レイアウト関係
    $this->layout = "Sample";
    $this->set("header_for_layout", "Sample Application");
    $this->set("footer_for_layout", 
        "copyright by SYODA-Tuyano. 2011.");
    // post時の処理
    if ($this->request->is('post')) {
      $this->MySampleData->save($this->request->data);
    }
  }

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る