Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter-在环境之间切换_Php_Codeigniter - Fatal编程技术网

Php Codeigniter-在环境之间切换

Php Codeigniter-在环境之间切换,php,codeigniter,Php,Codeigniter,默认情况下,每个codeigniter应用程序都在ci.php中定义了环境: define('ENVIRONMENT', 'development'); 我需要在我的应用程序中在不同的国家之间切换,每个国家都有自己的配置和数据库。所以我尝试在'config'文件夹中为每个国家创建文件夹,并将所有需要的配置放在那里。然后我想从下拉列表中选择国家并切换环境。像这样尝试: define('ENVIRONMENT', 'mexico'); 但这会引起错误: 消息:已定义常量环境 我怎样才能做到这一点

默认情况下,每个codeigniter应用程序都在ci.php中定义了环境:

define('ENVIRONMENT', 'development');
我需要在我的应用程序中在不同的国家之间切换,每个国家都有自己的配置和数据库。所以我尝试在'config'文件夹中为每个国家创建文件夹,并将所有需要的配置放在那里。然后我想从下拉列表中选择国家并切换环境。像这样尝试:

define('ENVIRONMENT', 'mexico');
但这会引起错误:

消息:已定义常量环境


我怎样才能做到这一点呢?

您可以尝试在
index.php中实现这一点

开关($\u POST['env'])){
“墨西哥”案:
定义(‘环境’、‘墨西哥’);
打破
//等等。。。
}

您可以使用get方法和use在URL中传递选定的国家id或任何短代码 index.php中的以下代码:

您的URL应该如下所示:

www.example.com?country=在

www.example.com/controller\u name/function\u name/IN

if ($_GET['country']=='IN')
   define('ENVIRONMENT', 'india');
elseif ($_GET['country']=='us')
   define('ENVIRONMENT', 'us');
else
   define('ENVIRONMENT', 'uk');
:常量是简单值的标识符(名称)。顾名思义,值在 脚本的执行


因此,没有范围重新定义已定义的环境常量的值。您可以使用另一个常量名称[除ENVIRONMENT或codeignitor已使用的其他名称外]或更可取的变量来维护与国家/地区相关的版本。

在您的根文件夹中有一个文件调用
index.php
(下图)

在这里,如果您定义
“开发”
,它将显示您在Codeigniter框架上的错误

例如,如果发生数据库错误,它将显示此类错误

这样你就可以检查出什么地方出了问题

您可以通过定义测试或生产来测试它。这样您将只获得空白页,而不是错误详细信息

我认为,define
这样的变量调用
mexico

阅读本文

  • 解决方案1: 由于环境已经在codeigniter中默认定义,所以这个特定需求可以通过

    if (!defined('ENVIRONMENT')) {
        define('ENVIRONMENT', 'mexico');
    }
    
    if (!defined('ENVIRONMENT')) {
        define('ENVIRONMENT', 'mexico');
    }
    

    由于环境已经在codeigniter中默认定义,所以这个特定需求可以通过

    if (!defined('ENVIRONMENT')) {
        define('ENVIRONMENT', 'mexico');
    }
    
    if (!defined('ENVIRONMENT')) {
        define('ENVIRONMENT', 'mexico');
    }
    

    在index.php中发布config.phpDefine环境。不建议更改/取消设置常量。但这里有一个关于如何做到这一点的答案:不使用环境进行本地化的可能重复。这将通过url确定配置。我与许多国家只有一个url。因此,当选择一个国家/地区时,切换到该国家/地区配置。也许这个方法不正确,也许我不应该对环境这样做。好吧,你可以用
    $\u POST
    变量来做这个解决方案,但在我看来,动态更改环境常量并拥有一个else if else if else if else if森林不是一个好的做法。。。这不是一个好的练习,这正是我在控制器中所做的。已经定义的var发生错误。谢谢,伙计,方法不正确。通过动态地使用$this->load->database()来解决这个问题。@stackUnderflow您需要什么。你能帮我清理一下吗?这将很容易帮助你。我想动态切换国家数据库。在会话中存储国家,在所有控制器构造函数中检查国家,并加载适当的数据库。