我正在使用codeigniter,我正在处理的项目必须使用两种语言。
我唯一想知道的是当会话变量设置为某个值时,如何在codeigniter中选择不同的数据库。
示例:
如果会话变量'language'设置为'EN',我希望它选择数据库: “databasename_EN”
在所有其他情况下选择DB: “databasename_EN”
我发现的唯一一件事是你可以做$ this-> db-> load('bla');但这意味着你必须在每个模型中添加一个DB-load,你必须禁用自动加载'数据库'。
答案 0 :(得分:4)
为了获得最佳结果,我将创建一个pre_system挂钩,用于检查$ _SESSION ['lang']变量是否存在以及是否设置了常量:
define('LANG', isset($_SESSION['lang']) ? $_SESSION['lang'] : 'EN');
然后在您的数据库配置文件中执行以下操作:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_".LANG;
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
应该尽量减少麻烦。
答案 1 :(得分:3)
Phil Sturgeaon的一个变种回答:
$active_group = LANG; // switch the DB based on the LANG constant
$db['EN']['hostname'] = "localhost";
$db['EN']['username'] = "root";
$db['EN']['password'] = "";
$db['EN']['database'] = "databasename_EN";
// etc
$db['FR']['hostname'] = "localhost";
$db['FR']['username'] = "root";
$db['FR']['password'] = "";
$db['FR']['database'] = "database_FR";
//etc
答案 2 :(得分:1)
我猜你可以创建一个MyModel类来扩展Model并处理这个体操。你需要做的就是使用MyModel作为模型的父类。