【问题标题】:Codeigniter - switch between environmentsCodeigniter - 在环境之间切换
【发布时间】:2015-08-12 11:38:52
【问题描述】:

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

define('ENVIRONMENT', 'development');

我需要在我的应用中切换不同的国家,每个国家都有自己的配置和数据库。因此,我尝试在“config”文件夹中为每个国家/地区创建文件夹,并将所有需要的配置放在那里。然后我想从下拉列表中选择国家并切换环境。尝试这样:

define('ENVIRONMENT', 'mexico');

但这会引发错误:

消息:常量 ENVIRONMENT 已定义

我该怎么做?

【问题讨论】:

标签: php codeigniter


【解决方案1】:

Constant:常量是简单值的标识符(名称)。顾名思义,值在 脚本的执行

因此没有范围可以重新定义 ENVIRONMENT 常量的值,因为它已经定义了。您可以使用另一个常量名称 [除了 ENVIRONMENT 或其他已被 codeignitor 使用的名称] 或者最好使用 variable 来维护您的国家/地区相关版本。

【讨论】:

    【解决方案2】:

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

    如果您在此处定义'development',它将在您的 Codeigniter 框架上显示您的错误

    例如,如果发生数据库错误,它会显示这种错误

    因此,您可以检查出问题所在。

    可以测试通过定义到 testingproduction。这样您就只会得到空白页而不是错误详细信息

    而且我没有使用define这样的变量调用mexico

    阅读本文

    1. Handling Multiple Environments
    2. What is Development Environment?

    【讨论】:

    • 谢谢你,方法不正确。通过动态使用 $this->load->database() 弄清楚了。
    • @stackUnderflow 你需要什么。你能把我说清楚吗?它会很容易帮助你。
    • 我想动态切换国家数据库。通过在会话中存储国家、在所有控制器构造函数中检查国家并加载正确的数据库来做到这一点。
    【解决方案3】:

    你可以试着在你身上做这个index.php

    switch( $_POST['env']) { case 'mexico' : define('ENVIRONMENT', 'mexico'); break; //etc ... }

    【讨论】:

    • 这将通过 url 确定配置。我只有一个包含许多国家/地区的网址。 So when select a country - switch to that country config.也许方法不正确,也许我不应该在环境中这样做。
    • 好吧,您可以使用$_POST 变量来制作此解决方案,但在我看来,动态更改环境常量并不是一个好习惯
    【解决方案4】:

    解决方案 1: 由于在codeigniter中已经默认定义了ENVIRONMENT,所以这个具体需​​求可以通过

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

    【讨论】:

      【解决方案5】:

      由于在codeigniter中已经默认定义了ENVIRONMENT,所以这个具体需​​求可以通过

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

      【讨论】:

        【解决方案6】:

        您可以使用 get 方法传递选定的国家/地区 ID 或 URL 中的任何短代码并使用 index.php 中的以下代码:

        你的网址应该是这样的:

        www.example.com?country=IN

        www.example.com/controller_name/function_name/IN

        if ($_GET['country']=='IN')
           define('ENVIRONMENT', 'india');
        elseif ($_GET['country']=='us')
           define('ENVIRONMENT', 'us');
        else
           define('ENVIRONMENT', 'uk');
        

        【讨论】:

        • 还有一大片 else if else if else if... 不是一个好习惯的人
        • 这正是我在控制器中所做的。并且已经定义的 var 发生错误。
        猜你喜欢
        • 2018-04-27
        • 2018-11-20
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 2014-01-05
        相关资源
        最近更新 更多