0

我使用 CI-HMVC 股票。我想有一个这样的模块结构:

应用
    模块
        用户abc
            模块A
                控制器
                楷模
                意见
            模块B
                ...
        用户定义
            模块C
                ...

这是一种不正确的模块组织方式吗?还有另一种常见的方法来做这样的事情吗?

我想分离用户模块文件夹并在这样的 URL 中使用它们:
userABC.domain.com/module/controller/method
userBCD.domain.com/module/controller/method

4

2 回答 2

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.'/'
);
于 2013-01-15T00:44:47.060 回答
1

在 codeigniter 中添加子模块,您需要像这样在配置文件中破坏 moudules 目录。

$config['modules_locations'] = array(
APPPATH.'modules/'          => '../modules/backend/',
APPPATH.'modules/frontend/' => '../modules/frontend/', 
 );
于 2017-11-20T11:26:04.873 回答