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

时间:2015-03-24 10:51:37

标签: php zend-framework

我正在开发基于Zend Framework 1.12的API并使用模块(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有没有办法通过知道模块名称在模块外动态加载类?

谢谢,

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

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