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対1hasMany: 1対多belongsTo: 多対1hasAndBelongsToMany: 多対多
ヘルパー
ビューで使える便利な関数群です。
FormHelper: フォーム生成HtmlHelper: HTML生成SessionHelper: セッション操作
セキュリティ対策
XSS対策
出力時には必ず h() 関数でエスケープします。
<?php echo h($user['User']['name']); ?>
CSRF対策
FormHelperを使用すると、自動的にCSRFトークンが生成されます。
SQLインジェクション対策
CakePHPのORMを使用することで、自動的にプリペアドステートメントが使用されます。
まとめ
CakePHP2は古いバージョンではありますが、シンプルで分かりやすい構造を持っています。既存のCakePHP2プロジェクトをメンテナンスする際には、この基本を押さえておくことが重要です。
ただし、セキュリティサポートは既に終了しているため、新規プロジェクトではCakePHP4以降の使用を検討することをお勧めします。