- 更新日: 2015年11月5日
- PHP & CakePHP
CakePHP3でDBテーブルを使わないモデル
CakePHP3でデータベースのテーブルを使わないモデルのクラスを作成したかったのですが、いまいち正しいやり方が分かりません。src/Model 直下に何も継承しない単一のクラスを作って代用したのですけど、ビルトインのバリデーションの使い方も分からず、色々課題の残るエントリーです。
— 環境 —
CakePHP 3.1.1
PHP 5.5.19
CakePHP 2.* の場合
CakePHP 2.* 系ですと、$useTable に false を設定することでDBテーブルなしのモデルを作成できる。
1 2 3 4 5 |
class TableLessModel extends AppModel { public $useTable = false; // ... } |
バリデーションも設定すると使える。
CakePHP 3.* の場合
CakePHP 3 の場合、モデルのデフォルトのディレクトリ構造が以下のようになっています。
1 2 3 4 5 6 7 8 |
CakeApp |src | | Model/ | | | Behavior/ | | | Entity/ | | | Table/ |
上記のディレクトリ構造になっていて、どうもモデルはDBテーブルを使うことが前提になっているような気が…。CakePHP3は、情報も経験も少ないので間違っているかもしれませんけれど。
通常のDBテーブルを利用するモデルの場合は、Table クラスを継承したモデルのクラスでバリデーションの設定を行います。以下公式ドキュメントを参考。
Validating Data – CakePHP Cookbook 3.x documentation
src/Model 以下に単一クラスを作って代用
公式ドキュメントや検索で情報を探してみたけど、結局正しいやり方が分からなかったので、src/Model 直下に単一の何も継承しない通常の PHP クラスを作って代用しました。
1 2 3 4 5 6 7 8 9 |
CakeApp |src | | Model/ | | | Behavior/ | | | Entity/ | | | Table/ | | | TableLessModel.php |
継承なしの通常の PHP のクラス(TableLessModel クラス)で代用。
src/Model/TableLessModel.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace App\Model; class TableLessModel { public $id = ''; public $name = ''; function __construct($id){ // ... } // ... } |
バリデーションの設定の仕方が解決していないので、そこは課題です…。
コントローラーでは以下のように使う。
src/Controller/TableLessModelsController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace App\Controller; use App\Controller\AppController; use App\Model\TableLessModel; class TableLessModelsController extends AppController { // ... public function view($id = null) { // ... $object = new TableLessModel($id); $this->set('object', $object); // ... } } |
一応こんな感じのコードを書いて動きはしたのですけど、色々だめな感じです。CakePHP3 で DB テーブルを使わないモデルの正しい作成の仕方をご存知な方がおられたら、ぜひご教授お願いいたします。テーブルなしのモデルでもビルトインのバリデーションは使いたいのですよね…。
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!