【问题标题】:Getting around a "problem" with the naming conventions used by the Zend Framework autoloader使用 Zend Framework 自动加载器使用的命名约定解决“问题”
【发布时间】:2010-12-16 17:47:27
【问题描述】:

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

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

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

现在,让我们进一步假设我们想要另一个 user 对象,而不是 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

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

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

【问题讨论】:

  • 我不能 100% 确定您要解决什么问题...我将尝试通过给您一个示例来回答我将如何设置该表和行类跨度>

标签: zend-framework zend-autoloader


【解决方案1】:

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

【讨论】:

  • Zend Framework 回复的问题是:致命错误:在...中找不到类“Model_Users”如果我手动包含这两个文件,一切正常。如果我更改它们的名称,这样它们就不会“碰撞”,它也可以正常工作。
【解决方案2】:

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

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

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

【讨论】:

  • 我在我的应用程序中有这个核心功能。但是对于模块特定的东西,模型将在模型文件夹中重新定位,因为除了核心功能之外,每个模块都是完全独立的。
【解决方案3】:

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

确保初始化自动加载器,可能在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 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2012-09-07
    相关资源
    最近更新 更多