假设我有一个包含用户的表格。因此,该表中的每一行都是用户。这里重要的部分是复数与单数形式。
现在,让我们看看我们在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.php
和UsersModel.php
。
因此,这个漫长而有点诗意的问题的问题是:
有没有办法绕过这个没有开始手动使用包含?
答案 0 :(得分:1)
实际上建议将表类放在模型中的db文件夹中,因此对于表,它们是models / dbtable / users.php和类名Model_DbTable_Users,对于具体用户,它们是models / user.php和Model_User。但是如果你决定跳过这个问题我没有看到模型/ user.php与Model_User和models / users.php与Model_Users作为表的问题。
答案 1 :(得分:0)
首先让我说 never 使用/model
目录自动加载目录结构。我个人更喜欢将我的模型放在我为该应用程序创建的“库”中。
以下是我application.ini
includePaths.library = APPLICATION_PATH "/../library"
autoloadernamespaces[] = "SNTrack_"
我的用户将为SNTrack_Model_User
,位于/library/SNTrack/Model/User.php
。我会打电话给表格 SNTrack_Model_UserTable
。
答案 2 :(得分: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
。
一切都应该没问题。 #FamousLastWords; - )