首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多租户SAAS在Codeigniter4动态配置数据库中的应用

多租户SAAS在Codeigniter4动态配置数据库中的应用
EN

Stack Overflow用户
提问于 2022-04-22 02:57:16
回答 1查看 395关注 0票数 0

我正在尝试使用Codeigniter4构建一个多租户saas应用程序。我想为每个tanent的数据设置单个数据库,为用户设置一个全局数据库。我希望应用程序根据登录用户的tanent id自动切换到tanent的数据库。为此,我在app/config/constants.php中标识了tanents子域如下所示

代码语言:javascript
复制
if(!defined('myHostName')){
    $sd=explode(".",$_SERVER['HTTP_HOST']);

        //define('myHostName', $host);
    if($sd[0]=='localhost')
        define('dbname', 'defaultdb');
    else
        define('dbname', $sd[0]);

这些代码标识子域,如果调用来自子域,则将dbname定义为子域的名称。然后我在app/config/database.php中定义了两个数据库组,如下所示。

代码语言:javascript
复制
public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' =>  'db_blog',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

    public $data = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' =>  myHostName,
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

这很好,但是现在我希望基于域上的文件夹动态地选择数据库,例如对于租户1,基url将是https://example.com/tenant1租户2,基url将是https://example.com/tenant2承租者3,基url将是https://example.com/tenant3

这里的问题是,第一段(在本例中是tenant1/tenant2/tenant3)由codeigniter4标识为控制器,我假设必须有某种方法来识别站点url上的文件夹名,或者解决方案可能类似于https://www.sandeeprajoria.in/2013/05/multi-tenancy-with-codeigniter.html

EN

回答 1

Stack Overflow用户

发布于 2022-04-28 02:44:46

https://stackoverflow.com/questions/65790279/how-to-set-dynamic-baseurl-on-app-config-app-php-using-codeigniter-4”教我如何回答我的问题。$baseURL是以所有urls为前缀的常量,如果我动态地更改它,我可以在Constants.php文件中访问这个变量。由于我不能在database.php中创建或修改变量,所以我在constants.php中创建了一个常量,并将数据库的名称动态地分配给了该常量,以供特定的租户使用。Constants.php中定义的常量在database.php中是可用的,因此我可以动态地为特定租户配置数据库。实现类似解决方案的任何更好的想法都是最受欢迎的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档