CakePHP 2.xの使い方を解説!MVCモデルでデータを表示する方法(学習・保守用)

CakePHPとは?PHP開発を効率化するフレームワーク

CakePHPは、PHPを使ったWebアプリケーション開発を高速化するためのフレームワークです。Webサイト制作において頻繁に必要となるデータベース操作やフォームの取り扱いといった、少し面倒な作業を効率化してくれる便利な「道具箱」のようなものだと考えてください。

CakePHPの大きな特徴は、「MVC(モデル・コントローラー・ビュー)」という設計パターンを採用している点です。

  • モデル (Model): データベースとのやり取りを担当します。(データの保存、取得など)
  • ビュー (View): ユーザーが目にする画面(HTML)の表示を担当します。
  • コントローラ (Controller): ユーザーからのリクエストを受け取り、モデルとビューの「橋渡し」をします。

このように役割を分担させることで、「どこで何をしているか」が明確になり、コードが整理されます。チームでの開発や、後からのメンテナンスが非常にやりやすくなる点が大きなメリットです。

この記事では、CakePHP 2.x系を使い、公式マニュアルに沿ってインストールからデータベースの値を表示させるところまでを解説します。

【重要】CakePHP 2.xのサポート終了について

CakePHP 2.xは、2021年6月をもって公式のセキュリティサポートが終了(EOM/EOL)しています。

そのため、これから新しいWebサイトを制作する場合には、セキュリティ上の観点から推奨されません。新しいプロジェクトでは、サポートが継続している後継バージョン(CakePHP 4.xや5.xなど)の利用を強くお勧めします。

この記事は、あくまでCakePHPの基本的な概念を学習する目的や、既存のCakePHP 2.xで構築されたシステムの保守・運用を担当する方向けのチュートリアルとしてお役立てください。

CakePHP 2.xのインストールと初期設定

まずは、CakePHP 2.xを動作させるための準備を行います。

1. CakePHPのダウンロード

公式サイト(現在はアーカイブ)やGitHubからCakePHP 2.xのソースコードを取得します。gitを使う場合は以下のコマンドでクローンできます。

git clone -b 2.x git://github.com/cakephp/cakephp.git

2. データベースの準備

CakePHPと接続するためのデータベースとテーブルをあらかじめ用意しておきます。今回は「posts」テーブルを作成します。

/* まず、posts テーブルを作成します: */
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

/* それから、テスト用に記事をいくつか入れておきます: */
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());

3. データベース接続設定 (database.php)

CakePHPにデータベースの接続情報を教えます。
/app/Config/database.php.default というファイルをコピーして、/app/Config/database.php にリネームしてください。

その後、database.php を開き、public $default の配列内をあなたの環境に合わせて編集します。

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '',
    'login' => 'データベースのユーザー名',
    'password' => 'データベースのパスワード',
    'database' => 'データベース名',
    'schema' => '',
    'prefix' => '',
    'encoding' => 'utf8'
);

4. セキュリティ設定 (core.php)

次に、セキュリティを強化するため、ハッシュ化などに使われるランダムな文字列(salt)を変更します。
/app/Config/core.php を開いて、以下の2箇所を変更してください。

/**
 * A random string used in security hashing methods.
 */
	Configure::write('Security.salt', 'ここを変更');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
	Configure::write('Security.cipherSeed', 'ここを変更');

「ここを変更」の部分は、推測されにくいランダムな英数字に書き換えます。ご自身で設定しても問題ありませんが、専用の生成ツール(例:Salt生成ツール)などを利用するのも便利です。

これで初期設定は完了です。

MVCモデルでデータベースの値を表示する

いよいよ、CakePHPの核となるMVCモデルを作成し、先ほど準備したデータベースの値をブラウザに表示させてみましょう。

1. モデル (Model) の作成

まず、データベースとの通信役である「モデル」を作成します。
/app/Model/Post.php というファイルを作成し、以下の内容を記述します。

<?php
class Post extends AppModel {
}
?>

モデルクラス名をPost(単数形・キャメルケース)にするだけで、CakePHPの**命名規則**により、自動的にデータベースのposts(複数形・スネークケース)テーブルと関連付けられます。

ファイルはこれだけで、このモデルを通じてデータベースの操作(追加・編集・削除など)が可能になります。

2. コントローラ (Controller) の作成

次に、ユーザーからのリクエストを処理する「コントローラ」を作成します。
/app/Controller/PostsController.php というファイルを作成します。

<?php
class PostsController extends AppController {
    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }
}
?>

ここでも命名規則が重要です。コントローラ名はモデル名(Post)の複数形(Posts)にControllerを付けたPostsControllerとします。

indexメソッド(public function index())は、/posts/ または /posts/index にアクセスされた際に実行される処理(アクション)です。

$this->Post->find('all') は、先ほど作成したPostモデルを通じて、postsテーブルの全データを取得する命令です。

$this->set('posts', ...) は、取得したデータをpostsという変数名で、次の「ビュー」に渡す役割を果たします。

3. ビュー (View) の作成

最後に、ユーザーに表示されるHTMLを生成する「ビュー」を作成します。
/app/View/Posts/index.ctp というファイルを作成します。(ディレクトリPostsも作成してください)

ファイル名は、コントローラ名(Posts)のディレクトリ内にある、アクション名(index)に対応したindex.ctpとなります。

<h1>記事一覧</h1>
<table>
    <tr>
        <th>Id</th>
        <th>タイトル</th>
        <th>作成日時</th>
    </tr>

    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td><?php echo $post['Post']['title']; ?></td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
    <?php unset($post); ?>
</table>

ビューファイルでは、コントローラからsetメソッドで渡された$posts変数を使うことができます。foreachでループ処理を行い、テーブル形式でデータを表示しています。

これで、あなたのWebサーバーで /(CakePHPを設置したディレクトリ)/posts/ にアクセスすると、データベースに登録した3件の記事が一覧で表示されるはずです。

(補足)レイアウトのカスタマイズ

CakePHPでは、ビュー(.ctpファイル)の内容は、デフォルトで用意されている共通レイアウトファイル(/app/View/Layouts/default.ctpなど)の中に組み込まれて表示されます。

もしサイト全体で共通のヘッダーやフッターを持つ独自のレイアウトに変更したい場合は、/app/View/Layouts/に新しいレイアウトファイル(例: mylayout.ctp)を作成し、コントローラでpublic $layout = 'mylayout';のように指定することで変更できます。

以下は、レイアウトファイルの基本的な構造例です。

<!DOCTYPE html>
<html>
<head>
	<?php echo $this->Html->charset(); ?>
	<title>
		<?php echo $this->fetch('title'); ?>
	</title>
</head>
<body>
	<div id="container">
		<div id="content">
			<?php echo $this->fetch('content'); ?>
		</div>
	</div>
</body>
</html>

<?php echo $this->fetch('content'); ?> の部分に、先ほど作成した index.ctp などのビューファイルの内容が自動的に挿入されます。

まとめ

今回は、CakePHP 2.xのインストールから、MVCモデルを使ったデータベースの表示まで、基本的な流れを解説しました。

CakePHPの「**設定より規約(Convention Over Configuration)**」という考え方、つまり命名規則などに従うことで、少ないコード量で素早く開発を進められる点が魅力です。

CakePHP 2.xはサポートが終了していますが、このMVCの考え方は後継バージョンや他のPHPフレームワークにも共通する重要な概念です。ぜひこの基本をマスターして、Webアプリケーション開発の第一歩としてください。

よくある質問 (FAQ)

Q1: CakePHP 2.xは、今から新規開発に使っても大丈夫ですか?
A1: いいえ、推奨されません。CakePHP 2.xは2021年6月に公式サポートが終了しており、セキュリティ上の脆弱性が発見されても修正されません。新規のWebサイト開発には、サポートが継続しているCakePHP 4.xや5.x、または他の現役のフレームワークを使用してください。この記事は学習や既存システムの保守用として参考にしてください。
Q2: MVCモデルを採用する一番のメリットは何ですか?
A2: 「ロジック(処理)」と「ビュー(見た目)」を分離できる点です。これにより、デザイナーとプログラマーが分業しやすくなるほか、後からコードを修正する際(メンテナンス)も、変更箇所が特定しやすくなり、作業効率が大幅に向上します。
Q3: モデル名やコントローラ名を自由に決めても良いですか?
A3: 自由に決めることも可能ですが、CakePHPの大きな特徴である「設定より規約」の恩恵を受けられなくなります。例えば、モデル名をPost(単数形)、テーブル名をposts(複数形)、コントローラ名をPostsController(複数形)という命名規則に従うだけで、モデルとコントローラ、テーブルが自動的に連携します。この規則に従わない場合、連携するための設定を別途記述する必要があり、コード量が増えてしまいます。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら