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