我用的是CI-HMVC库存。我希望有一个这样的模块结构:
<>之前应用程序模块userabcmoduleA控制器模型视图moduleB...userDEFmoduleC...之前这是一个不正确的模块组织方式吗?还有其他常见的做法吗?
我想把用户模块文件夹分开,并在URL中使用它们,像这样:
userABC.domain.com/module/controller/method
userBCD.domain.com/module/controller/method
如果您愿意,可以使用该结构,但请记住以下内容:
你必须将每个用户的目录定义为一个模块位置:
// 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
钩子。
如果您希望所有用户的模块都可以访问,而不管哪个子域是活动的,那么另一件事很重要:顺序很重要!
如果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.'/'
);
在codeigniter中添加子模块时,您需要像这样在配置文件中配置模块目录
$config['modules_locations'] = array(
APPPATH.'modules/' => '../modules/backend/',
APPPATH.'modules/frontend/' => '../modules/frontend/',
);