S2DaoEntityの生成
pages.scaffold周りのリファクタリング - Paradigm Shift Designの続きですが,Entityの生成について悩んでいます.
Entityの生成方法にはいくつかあって,
があって.どの手法をとろうかなぁと.
というか,拡張性とか何とかカンとか考えると,SQLかけよでいいんじゃないかなぁとおもう.
むしろ,DBDesignerとかのツール使ってよでいいんじゃないかと.
そこで問題になるのは,値のとる範囲だったりするんだけれども,それはページごとのPropertyにたいするアノテーションで指定でいいのかなーっておもう.
もしかしたら,設定を書いて,
<?php class PSD_IndexPage extends Ficus_AbstractPage{ /** * @Entity("Administrator") */ protected $person; } ?>
見たいにして関連付けたほうがいいのかもしれない.細かい指定がしたくなったら,PersonEntityから派生する形で,ViewerとかSubmitterとか定義して,プロパティにValidatorを定義してもいいと思う.
ん,GenerationGapな感じで,extendsしてValidator定義がいいかな.
-AutoPersonEntity | スキーマから自動生成 +UserEntity | 基本となるValidatorの定義 +AdministratorEntity | 以下UserEntityのValidatorを上書き +ViewerEntity | " +SubmitterEntity | "
みたいな.
constな値の定義はどうしようか.
現状では,id+nameな,
CREATE TABLE person_types ( id SERIAL, name VARCHAR(45) NULL, PRIMARY KEY(id) ); INSERT INTO person_types (id, name) VALUES (0, 'ADMINISTRATOR'); INSERT INTO person_types (id, name) VALUES (1, 'VIEWER'); INSERT INTO person_types (id, name) VALUES (2, 'BLOGGER'); INSERT INTO person_types (id, name) VALUES (3, 'SUBMITTER'); INSERT INTO person_types (id, name) VALUES (4, 'ADAGENT'); INSERT INTO person_types (id, name) VALUES (5, 'AFFILIATER');
みたいなテーブルは,
<?php class PersonType{ public function __construct(){ if(self::$initialized == false){ self::$LABEL = _("Entity_Label_PersonTypes"); self::$REMARK = _("Entity_Remark_PersonTypes"); self::$id_LABEL = _("Entity_Label_PersonTypes_id"); self::$id_REMARK = _("Entity_Remark_PersonTypes_id"); self::$name_LABEL = _("Entity_Label_PersonTypes_name"); self::$name_REMARK = _("Entity_Remark_PersonTypes_name"); self::$names["ADMINISTRATOR"]["id"] = 0; self::$names["ADMINISTRATOR"]["name"] = _("PersonTypes_ADMINISTRATOR"); self::$names["VIEWER"]["id"] = 1; self::$names["VIEWER"]["name"] = _("PersonTypes_VIEWER"); self::$names["BLOGGER"]["id"] = 2; self::$names["BLOGGER"]["name"] = _("PersonTypes_BLOGGER"); self::$names["SUBMITTER"]["id"] = 3; self::$names["SUBMITTER"]["name"] = _("PersonTypes_SUBMITTER"); self::$names["ADAGENT"]["id"] = 4; self::$names["ADAGENT"]["name"] = _("PersonTypes_ADAGENT"); self::$names["AFFILIATER"]["id"] = 5; self::$names["AFFILIATER"]["name"] = _("PersonTypes_AFFILIATER"); self::$initialized = true; } } } ?>
とかって自動生成をして,IDからnameをnameからIDを引けるようにしているんだけど,ちょっとかっこ悪い.
やっぱし,
<?php class PersonType{ const ADMINISTRATOR = 0; const VIEWER = 1; const BLOGGER = 2; const SUBMITTER = 3; const ADAGENT = 4; const AFFILIATER = 5; } ?>
とか定義されていて
<?php $person = new PersonType(); $persen->getText(PersonType::ADMINISTRATOR); ?>
とやるとenUSでは「Administrator」でjaJP「管理者」と出るようにしたい.でも,gettextはモジュール入れなきゃいけないし,あんまりすきくないなぁ.とはいえ設定ファイルは面倒だし,専用ツール作るのもいやだなぁ・・・
って感じです.