我正在使用CI-HMVC股票。 我喜欢这样的模块结构:
application modules userabc moduleA controllers models views moduleB ... userDEF moduleC ...
这是一种不正确的模块组织方式吗?是否还有另一种常见的方式来做这样的事情?
我想要分离用户模块文件夹并在这样的URL中使用它们:
userABC.domain.com/module/controller/method
userBCD.domain.com/module/controller/method
答案 0 :(得分:1)
如果需要,您可以使用该结构,但请记住以下内容:
您必须将每个用户的目录定义为模块位置:
// application/config/config.php
$config['modules_locations'] = array(
// Absolute path // Relative from default application dir
APPPATH.'modules/userABC/' => '../modules/userABC/',
APPPATH.'modules/userDEF/' => '../modules/userDEF/',
APPPATH.'modules/userGHI/' => '../modules/userGHI/',
// etc.
);
您可以动态执行此操作,但请记住config.php
很早就加载了,因此您可能需要pre_system
hook。
另一方面,如果您希望所有用户的模块都可以访问,而不管哪个子域处于活动状态,这一点很重要:订单很重要!
如果userA有一个名为“blog”的模块,userB也是如此,那么只会加载userA(假设您首先定义userA的模块路径)。如果您确定没有两个模块将共享相同的名称,这将无关紧要,但您可能会遇到性能损失,因为加载器将遍历整个模块位置堆栈,直到找到所请求的模块位置。
听起来你应该定义一个module_location
,具体取决于用户网站的加载位置(子域名)。类似的东西:
// Get this value dynamically (not sure how you need to do it)
$current_user = 'userABC';
$config['modules_locations'] = array(
APPPATH.'modules/'.$current_user.'/' => '../modules/'.$current_user.'/'
);
答案 1 :(得分:1)
在codeigniter中添加子模块,你需要在配置文件中玷污moudules direcotry。
$config['modules_locations'] = array(
APPPATH.'modules/' => '../modules/backend/',
APPPATH.'modules/frontend/' => '../modules/frontend/',
);