CakePHP 4 の MVC の概要と参考 URL まとめ
はじめに
CakePHP には MVC モデル(パターン)が採用されていますが、コンポーネント、ヘルパー、ビヘイビアなど、独特な用語も出てきます。
今日は CakePHP 4.x の MVC モデルについての概要と、公式ドキュメントの参考 URL をまとめます。
参考 URL は日本語ページを記載していますが、もし作業時にうまくいかないときは英語ページを見てみてください。
1. M (Model)
CakePHP のモデルは Entity と Table の2つに分けられていて、
さらに各種 Table から呼び出す関数をまとめた Behavior があります。
1-1. Entity
用途 | DB のテーブルにある1行分のデータを扱うもの |
---|---|
場所 | src/Model/Entity |
$books = $this->Books->find()->all();
foreach ($books as $book) {
debug($book); // ← この $book がエンティティ
}
ファイル名が Book.php のように単数形になるのは、1行分のデータを扱うクラスだからですね。
- エンティティー - 4.x
- https://book.cakephp.org/4/ja/orm/entities.html
1-2. Table
用途 | DB のテーブルを扱うもの。CRUD処理、バリデーションやリレーションの設定などを記述。 |
---|---|
場所 | src/Model/Table |
// ↓ この $this->Books がテーブル。
$books = $this->Books->find()->all();
- テーブルオブジェクト - 4.x
- https://book.cakephp.org/4/ja/orm/table-objects.html
- カスタム Finder メソッド (データの取り出しと結果セット - 4.x)
- https://book.cakephp.org/4/ja/orm/retrieving-data-and-resultsets.html#custom-find-methods
- 既定のバリデーションセットの作成 (データの検証 - 4.x)
- https://book.cakephp.org/4/ja/orm/validation.html#id3
- バリデーション - 4.x
- https://book.cakephp.org/4/ja/core-libraries/validation.html
- アソシエーション - モデル同士を繋ぐ - 4.x
- https://book.cakephp.org/4/ja/orm/associations.html
1-3. Behavior
用途 | 各 Table クラスで共通利用したい処理を書く |
---|---|
場所 | src/Model/Behavior |
公式サイトには「振る舞い」という単語が出てきますが、
基本的には共通利用したいイベント処理を書くと思います。
例えば標準実装されている TimestampBehavior には DB 保存時に created や modified を自動登録する機能があります。
public function initialize(array $config): void
{
// ↓ Table クラス内でこのように呼び出す
$this->addBehavior('Timestamp');
当ブログでは同じく保存時に Markdown を HTML に変換して登録する behavior も紹介しましたね。
- ビヘイビアー - 4.x
- https://book.cakephp.org/4/ja/orm/behaviors.html
- Timestamp - 4.x
- https://book.cakephp.org/4/ja/orm/behaviors/timestamp.html
- CakePHP 4 で Markdown を HTML に変換し behavior を使って効率的に保存するアイディア / Twin Turbo Computing
- https://tt-computing.com/cake4-md-behavior
2. V (View)
ビューには Template と Helper、そして View があります。
2-1. Template
用途 | HTML など出力内容を記述 |
---|---|
場所 | templates |
CakePHP のテンプレートは基本的には標準の PHP で記述します。
Twig や Blade、Smarty のような独自のタグは組み込まれていません。
- ビューテンプレート (ビュー - 4.x)
- https://book.cakephp.org/4/ja/views.html#view-templates
2-2. Helper
用途 | 各テンプレで使用したい共通処理を書く |
---|---|
場所 | src/View/Helper |
下記はテキストを切り詰める Text ヘルパーの truncate 関数の使用例です。
<?= $this->Text->truncate($comment, 20) ?>
- ヘルパー - 4.x
- https://book.cakephp.org/4/ja/views/helpers.html
- テキストの切り詰め (Text - 4.x)
- https://book.cakephp.org/4/ja/views/helpers/text.html#id6
2-3. View
用途 | 画面描画に関する共通処理を記述 |
---|---|
場所 | src/View |
View には、例えばテンプレートエンジンに Twig などを使いたい場合や、
PDF として出力する場合などの共通処理を書くことができます。
ヘルパーの読み込みもこの View で制御します。
- ビュー - 4.x
- https://book.cakephp.org/4/ja/views.html
- ヘルパーの設定 (ヘルパー - 4.x)
- https://book.cakephp.org/4/ja/views/helpers.html#configuring-helpers
3. C (Controller)
コントローラは Controller と Component の2つで構成されています。
3-1. Controller
用途 | メインの処理を記述 |
---|---|
場所 | src/Controller |
- コントローラー - 4.x
- https://book.cakephp.org/4/ja/controllers.html
3-2. Component
用途 | 各 Controller で使用する共通処理を書く |
---|---|
場所 | src/Controller/Component |
設計なしで作り始める場合は Controller に処理を書いていくと思いますが、開発が進んでくると同様の処理を繰り返し書く場合があります。
時々 Controller を見直して、Component に関数として実装できないか検討することで、保守性が高いコードが書けるようになるのでおススメです。