我正在开发基于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_Users
和V2_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有没有办法通过知道模块名称在模块外动态加载类?
谢谢,
答案 0 :(得分:1)
您可以尝试这样的事情:
$module = $frontController->getRequest()->getModuleName();
$module_class = ucfirst($module) . "_Model_Users";
$usersModel = new $module_class();