CakePHP2の基礎と実践的な使い方

CakePHP2とは

CakePHP2は、PHPのWebアプリケーションフレームワークであるCakePHPのバージョン2系です。2011年にリリースされ、現在ではレガシーなバージョンとなっていますが、多くの既存プロジェクトで今もなお使用されています。

MVCアーキテクチャを採用しており、規約に従うことで効率的な開発が可能です。

CakePHP2の特徴

規約優先(Convention over Configuration)

CakePHPの最大の特徴は「規約優先」の思想です。ファイル名やディレクトリ構造を規約に従って配置することで、設定ファイルを最小限に抑えることができます。

MVCアーキテクチャ

  • Model: データベースとのやり取りを担当
  • View: 画面表示を担当
  • Controller: リクエストの処理とModelとViewの橋渡しを担当

Scaffolding機能

開発初期段階で、基本的なCRUD操作を自動生成してくれる機能があります。

基本的なディレクトリ構造

app/
├── Config/          # 設定ファイル
├── Controller/      # コントローラー
├── Model/          # モデル
├── View/           # ビュー
├── webroot/        # 公開ディレクトリ
└── tmp/            # 一時ファイル

コントローラーの基本

コントローラーは Controller ディレクトリに配置し、AppController を継承します。

<?php
class UsersController extends AppController {
    public $uses = array('User');
    
    public function index() {
        $users = $this->User->find('all');
        $this->set('users', $users);
    }
    
    public function view($id = null) {
        $user = $this->User->findById($id);
        $this->set('user', $user);
    }
}

モデルの基本

モデルは Model ディレクトリに配置し、AppModel を継承します。

<?php
class User extends AppModel {
    public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => 'notEmpty',
                'message' => 'ユーザー名は必須です'
            )
        ),
        'email' => array(
            'email' => array(
                'rule' => 'email',
                'message' => '正しいメールアドレスを入力してください'
            )
        )
    );
    
    public $hasMany = array('Post');
}

ビューの基本

ビューファイルは View ディレクトリ内に、コントローラー名のディレクトリを作成して配置します。

<!-- View/Users/index.ctp -->
<h2>ユーザー一覧</h2>
<table>
    <tr>
        <th>ID</th>
        <th>ユーザー名</th>
        <th>メール</th>
    </tr>
    <?php foreach ($users as $user): ?>
    <tr>
        <td><?php echo h($user['User']['id']); ?></td>
        <td><?php echo h($user['User']['username']); ?></td>
        <td><?php echo h($user['User']['email']); ?></td>
    </tr>
    <?php endforeach; ?>
</table>

よく使う機能

バリデーション

CakePHP2では、モデルに $validate プロパティを定義することで、データのバリデーションを行えます。

アソシエーション

テーブル間のリレーションを定義できます。

  • hasOne: 1対1
  • hasMany: 1対多
  • belongsTo: 多対1
  • hasAndBelongsToMany: 多対多

ヘルパー

ビューで使える便利な関数群です。

  • FormHelper: フォーム生成
  • HtmlHelper: HTML生成
  • SessionHelper: セッション操作

セキュリティ対策

XSS対策

出力時には必ず h() 関数でエスケープします。

<?php echo h($user['User']['name']); ?>

CSRF対策

FormHelperを使用すると、自動的にCSRFトークンが生成されます。

SQLインジェクション対策

CakePHPのORMを使用することで、自動的にプリペアドステートメントが使用されます。

まとめ

CakePHP2は古いバージョンではありますが、シンプルで分かりやすい構造を持っています。既存のCakePHP2プロジェクトをメンテナンスする際には、この基本を押さえておくことが重要です。

ただし、セキュリティサポートは既に終了しているため、新規プロジェクトではCakePHP4以降の使用を検討することをお勧めします。

← 記事一覧へ戻る