0

假设我有一个包含users的表。因此,该表中的每一行都是一个用户。这里的重要部分是复数与单数形式。

现在,让我们看看我们在 Zend Framework 中为这些设置的模型:

class Model_Users extends Zend_Db_Table_Abstract
{
  protected $_name      = 'users';
  protected $_primary   = 'user_id';
}

现在,让我们进一步假设我们想要另一个用户对象,而不是返回的标准行Zend_Db_Table,但我们仍然想保留它的功能,只是扩展它。然后,实现并命名单个用户是有意义的,例如:

class Model_User extends Zend_Db_Table_Row_Abstract
{
  ... Bunch of cool functions here :)
}

然后我们只需添加 protected $_rowClass = 'Model_User';Model_Users类中就完成了……通常情况就是这样,但是 Zend Framework 自动加载类的方式似乎存在问题。因为我们可以拥有文件夹结构/defaut/models/foo.php并在其中命名类Model_Foo。该文件夹有一个复数名称,但该类有一个单数名称。当我想要具有上述结构时,这似乎成为一个问题。由于 Zend Framework 似乎无法区分UserModel.phpUsersModel.php.

所以这个冗长而有点诗意的问题的问题是:

有没有办法在不开始手动使用包含的情况下解决这个问题?

4

3 回答 3

1

实际上,建议将表类放在模型中的 db 文件夹中,因此对于表来说,它是 models/dbtable/users.php 和类名 Model_DbTable_Users,对于具体用户来说是 models/user.php 和 Model_User。但是,如果您决定跳过它,我看不到将 model/user.php 与 Model_User 和 models/users.php 与 Model_Users 作为表的问题。

于 2010-12-16T18:34:52.613 回答
0

看起来像一个标准的自动加载器。

确保初始化自动加载器,可能在 中Bootstrap.php,使用类似:

protected function _initAutloader()
{
     $autoloader = new Zend_Application_Module_Autoloader(array(
         'basePath'    => APPLICATION_PATH,
          'namespace'  => '',
     ));
}

然后在application/models/User.php你定义你的类Model_User。在application/models/Users.php你定义你的类Model_Users

一切都应该没问题。#著名遗言 ;-)

于 2010-12-17T11:36:29.987 回答
0

首先让我说我从未使用过/model目录自动加载目录结构。我个人更喜欢将我的模型放在我为该应用程序创建的“库”中。这是我的摘录application.ini

includePaths.library = APPLICATION_PATH "/../library"    
autoloadernamespaces[] = "SNTrack_"

我的用户SNTrack_Model_User位于并位于/library/SNTrack/Model/User.php。我会打电话给桌子 SNTrack_Model_UserTable

于 2010-12-16T18:23:58.900 回答