CodeIgniter HMVC用户特定的模块结构

时间:2013-01-14 22:19:38

标签: php codeigniter module hmvc

我正在使用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

2 个答案:

答案 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/', 
 );