Zend Framework 1 - 在模块外动态加载模型

Zend Framework 1 - dynamically loading model outside of module

我正在开发基于 API 的 Zend Framework 1.12,并通过使用模块(v1、v2)实现了版本控制,每个模块都是 API 的不同版本,尽管这可能不是最佳实践。

我有以下目录结构:

application
    modules
        v1
            controllers
            models
        v2
            controllers
            models
library
    Myapp
        controller
            plugin
                TranslateHandler.php
    Zend
public

我有一个定制的插件 Myapp_Controller_Plugin_TranslateHandler.php,它在 Bootstrap 中被调用,以便在用户通过身份验证时设置默认语言或首选语言。

这是我在 TranslateHandler 中查找用户的代码:

$users = new V1_Model_UsersMapper();
$users->findByAuthToken($auth_token, $usersModel = new V1_Model_Users());

问题是我每个模块都有一个模型,名为 V1_Model_UsersV2_Model_Users

我可以检查通过 Request 对象设置了哪个模块。 我可以执行以下操作:

$module = $frontController->getRequest()->getModuleName();
if($module == 'v1')
{
    //use V1_Model_Users
}
elseif($module == 'v2')
{
    //use V2_Model_Users
}

但是,我想避免在代码中硬编码模块名称。 理想情况下,我想在我的 TranslateHandler 插件中动态加载 *_Model_Users

tl;dr 有没有办法通过知道模块名称在模块外部动态加载 类?

谢谢,

您可以尝试这样的操作:

$module = $frontController->getRequest()->getModuleName();
$module_class = ucfirst($module) . "_Model_Users";
$usersModel  = new $module_class();