CodeIgniter HMVC用户特定的模块结构


CodeIgniter HMVC user specific module structure

我用的是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/', 
 );