CakePHPの基本 データを一覧表示させる方法

Pocket

CakePHPのデータの一覧表示と追加をする方法を紹介します。前回の記事ではCakePHPをインストールする方法とHelloWorld!の表示までを行いました。

CakePHPの使い方 インストールからHelloWorldまで

今回はデータを取得し、一覧表示させてみます。さらにデータを新しく追加するところまでをやってみたいと思います。

データベースの準備

まずはテスト用としてデータベースの準備をしていきます。ここではMAMPを使用しデータを入力していきます。今回はこんな感じで設定してみます。

  • DBname:cake_test
  • テーブル:memos
  • カラム1:id
  • カラム2:title
  • カラム3:text
  • カラム4:careated
  • カラム5:modified



データベースができたらCakaPHPのConfig->database.phpを開きアクセスするデータベースのセッティングをします。設定するのは以下の3つ。

  • login:ユーザー名
  • password:パスワード
  • database:DB名



ページにアクセスしてみると、前回あった黄色い警告文がなくなってエラーが全て消えました。
cakephp-second01

データをつなぐModelの作成

CakePHPはMVCパターンを採用しており、モデル・ビュー・コントローラーの3つの機能を作成します。ここではそのうちのモデルを作成します。

モデルはデータベースのテーブルと繋がるもので基本的にテーブル名と同じ+頭文字を大文字+単数形でつくります。今回はmemosというメモを保存するテーブルなのでモデル名はMemo.phpとなります。これをModelフォルダに作成します。

CakePHPにはデータベースを操作するクラスが既にあるのでそれを継承するだけで基本の操作はできるようです。モデルクラスの中ではデータベースの結合やバリデーションなどの処理を書きます。今回はただ表示するだけなので、ファイルの中身は以下のように記述します。

<?php
class Memo extends AppModel{

}

データを引っ張りだすコントローラの作成

次はデータを引っ張りだすためのコントローラの作成です。コントローラーはモデル名+複数形+Controllerでファイル名を作成します。ここではMemosController.phpとなります。このファイルをControllerフォルダに作成します。

こちらもCakePHPのクラスを継承しておきます。Controllerにはページへ送るデータのセットや帰ってきたリクエストの処理などを記述します。今回は一覧表示させたいので、データベースのデータを全てindexページに送信するようにしたいと思います。

<?php
class MemosController extends AppController{

    public function index(){
        //set('送信する変数名',$this->Model名->find('条件'));
        $this->set('Memo',$this->Memo->find('all'));
    }
}

データを表示するビューを作成

コントローラからデータを引っ張りだせたので、今度はそれを一覧表示するビューを作成します。コントローラーから配列で送られてきたデータをHTMLで入れ物を作って流し込む作業です。

CakePHPのView->Layout->default.ctpにすでにヘッダーとフッターが入ってるので、ページのcontentの部分だけを記述します。作業の流れは、Viewにコントローラーと同名のフォルダを作成
、その中にアクション(メソッド)名と同じテンプレートを作成となります。

ちなみにどんなデータが送信されてきているのかをdebag()という関数でみることもできるので、それでデータをチェックしてから配列の操作をするとわかりやすいですね。

<h2>デバッグ</h2>
<ul>
    <li>
        <?php foreach($Memo as $memo): ?>
            <?php debug($memo); ?>
        <?php endforeach; ?>
    </li>
</ul>

cakephp-second02
デバッグ表示するとこのようなデータが送信されていることがわかります。ではこの送られてきたデータを一覧表示させるためHTMLを作っていきます。

<h2>一覧表示</h2>
<ul>
    <?php foreach($Memo as $memo): ?>
        <!-- <?php debug($memo); ?> デバッグ-->

       <!-- 配列のデータを取り出してechoで出力する、h()はエスケープ -->
        <li><?php echo h($memo['Memo']['title']); ?></li>

    <?php endforeach; ?>
</ul>

cakephp-second03
これでとりあえずタイトルの一覧表示ができました。コード自体はほんの少ししか書いていませんがデータを取得したり、それをページに読み込んで表示するということが簡単にできます。

この後はデータの追加・編集・削除をやってみたいと思います。

  • saitoh

    CakePHPを習い始めたばかりの者です。
    丁寧な解説で分かりやすいですね。大変参考になりました。

    >データを引っ張りだすコントローラの作成
    $this->set(‘Memo’,$this->Memo->find(‘all’);

    閉じ括弧が足りていません。

    • kaibasanjyu

      返信遅れました。ご指摘ありがとうございます。修正しておきます!

    • sanjyu

      ご指摘ありがとうございます!
      ()の部分修正しました。