私は、デフォルトのZend ORMシステムを拡張しようとしています。つまり、Zend_Db_Tableを介してDbからデータを取得すると、後でこのデータをZend_Db_Table_RowsetまたはZend_Db_Table_Rowクラスを使用して処理できます。 私の考えでは、このようなカスタムファクトリクラスを使用することです:アイデアのzend_db_table setRowClassは、Zend_Db_Table_Rowの代わりに私のカスタムクラスをバインドしません。
class Go_Factory {
const PREFIX = 'mule_';
/**
* get from database item by specified primary key
*
*/
public static function get($class_name, $identity){
return self::getDbTable($class_name)->find($identity);
}
/**
* well, there is a corelation between class name and represented by it table name in DB
* so let's get one from another
* return instance of Zend_Db_Table with defined _name and _rowclass parameters and
*/
public static function getDbTable($class_name){
$db_table_class = str_replace("Model_", "Model_DbTable_", $class_name) . "s";
$row_class = class_exists($class_name) ? $class_name : "Core_Model_Item";
if(!(class_exists($db_table_class))){
$temp = explode("_", $class_name);
$table_postfix = strtolower(preg_replace('/([^A-Z])([A-Z])/', "$1_$2", $temp[ 2 ]));
$table_name = Zend_Registry::get('prefix') . strtolower($temp[ 0 ]) . '_' . $table_postfix . 's';
$db_table = new Zend_Db_Table(array('name' => $table_name));
$db_table->setRowClass($row_class);
return $db_table;
} else {
return new $db_table_class();
}
}
}
コアは、要求CLASS_NAMEが定義されている場合は、私の工場が見えるようにすることであり、それがある場合は、インスタンス化のZend_Db_TableクラスのrowClassとしてCore_Model_Itemを取得できません。確かにCore_Model_ItemはZend_Db_Table_Rowクラスを拡張します。
行$db_table->setRowClass($row_class);
は有効ではありません。私はrowClassが定義の直後にvar_dump($db_table->getRowClass());
を置くだけで成功したかどうかを調べようとしました。それは""
を示しています - 何も設定されていません!そして、最近、次のエラーが表示されます。
Warning: include_once(.php) [function.include-once]: failed to open stream: ��� ������ ����� ��� �������� in /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Loader.php on line 146
Warning: include_once() [function.include]: Failed opening '.php' for inclusion (include_path='/home/users2/n/newpanel/domains/newpanel.jino/application/../library:/home/users2/n/newpanel/domains/newpanel.jino/library:.:/usr/local/zend/share/pear') in /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Loader.php on line 146
Fatal error: Uncaught exception 'Zend_Exception' with message 'File ".php" does not exist or class "" was not found in the file' in /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Loader.php:99 Stack trace: #0 /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Db/Table/Abstract.php(1357): Zend_Loader::loadClass('') #1 /home/users2/n/newpanel/domains/newpanel.jino/library/Go/Factory.php(30): Zend_Db_Table_Abstract->fetchAll(Object(Zend_Db_Table_Select)) #2 /home/users2/n/newpanel/domains/newpanel.jino/application/modules/core/plugins/Acl.php(22): Go_Factory::reference('User_Model_Role') #3 /home/users2/n/newpanel/domains/newpanel.jino/application/Bootstrap.php(28): Core_Plugin_Acl::getAcl() #4 /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Application/Bootstrap/BootstrapAbstract.php(667): Bootstrap->_initNavigation() #5 /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Application/Bootstrap/BootstrapAbstract.php(620): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('na in /home/users2/n/newpanel/domains/newpanel.jino/library/Zend/Loader.php on line 99
私が間違っているかどうかわかりません。